码迷,mamicode.com
首页 > 编程语言 > 详细

unity------------------------------transform.forward与Vector.forward的区别

时间:2017-10-03 12:38:07      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:情况   sel   世界   说明   技术   transform   orm   sla   ==   

在unity3d中有2个forward,一个是vector3.forward和transform.forward,这两个forward其实完全不一样。他们之间的区别主要体现在在不同坐标系时的反映上。

 

 

我们分别对比一下 vector3和transform两个向量的forward 在 self自身坐标系 和 world世界坐标系 中的表现,我们用transform.translate函数来验证。。

注:自身坐标!=世界坐标 意味着两个坐标系不重合。

 

self自身坐标系——space.self

vector3.forward

技术分享

transform.forward

技术分享

在这里我就感到很困惑了,为什么transform.forward转自身坐标后会有如此诡异的结果。

 

技术分享

 

画完上面的图后终于明白了。

self自身坐标系的转换是这样的:

将想要转换的向量跟相对于世界坐标轴整个移到目标坐标轴上。

技术分享

在transform.forward身上就是

技术分享

 

那么这里总结一下 vector3.forward和transform.forward的区别。

vector3.forward的值永远等于(0,0,1)。

transform.forward的值则等于当前物体的自身坐标系z轴在世界坐标上指向,因此不一定等于(0,0,1),但是其magnitude长度是1。

这也就是为什么,transform.forward 转换为self自身坐标系时会有这种结果。

 

在world世界坐标系——space.world上的情况则完全相反。

 

因此,想要让物体向前移动,在transform.translate()上和直接修改transform.position上,差别是挺大的。

 

transform.position 本身就是世界坐标。

1、transform.position+= vector3.forward 

等于是在世界坐标的z轴前进。

2、transform.position+=transform.forward 

等于是物体自身坐标系的z轴前进。

 

3、transform.translate(vector3.forward,space.self) 

等于是自身坐标系的z轴前进。

效果等同于2。

4、transform.translate(transform.forward,space.self) 

上面出现的奇葩结果就是这个用法引起的,建议不是特殊需要别用这个用法。

5、transform.translate(vector3.forward,space.world)

等于是让物体沿着世界坐标的z轴前进。

效果等同于1。

6、transform.translate(transform.forward,space.world)

等于是让物体沿着“物体自身坐标z轴在世界坐标上的方向”前进(等同与物体沿着自身z轴前进)。

效果等同于2。

 

 

技术分享

没想到这篇小小的文章这么多人看,搞得我诈尸回来补充点说明。

 

其实transform大家可以理解为 scene视图里面 每个gameobject身上的那三个箭头,你也可以理解为transform就是自身坐标系。transform上每个箭头就是对应transform.up transform.right transform.forward 这三个世界坐标向量,这三个向量绝对不是vector3.up vector3.forward vector3.right之流全是(0,1,0)(0,0,1)(1,0,0),不过magnitude都是1就是了,从图里看就知道了。

图中 transform.forward=(0, 0.9, -0.5) 

那么 transform.translate(tranform.forward,space.self) 就是 往自身坐标系的(0, 0.9, -0.5) 这个方向走。

那么用Transform的TransformPoint()转换成世界坐标就是 (-0.7, 3.9, -25.8),也就是gameobject这个物体的实际移动方向是(-0.7, 3.9, -25.8)。

unity------------------------------transform.forward与Vector.forward的区别

标签:情况   sel   世界   说明   技术   transform   orm   sla   ==   

原文地址:http://www.cnblogs.com/w-wfy/p/7623494.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!