Unity3d vector3.forward和transform.forward的区别!
来源:互联网 发布:ar涂涂乐下载软件 编辑:程序博客网 时间:2024/05/22 09:45
在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。
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别
- Unity3d vector3.forward和transform.forward的区别!
- Unity3d vector3.forward和transform.forward的区别
- vector3.forward和transform.forward
- Unity3d的Vector3.forward和tansform.forward区别
- Transform.Forward和Vector3.Forward的正确使用方法
- forward和redirect的区别
- forward和sendReidrect的区别
- forward 和redirect的区别
- forward和redirect的区别
- forward和redirect的区别
- forward和sendRedirect的区别
- matlab里如何表示冲激信号
- 对泛滥的盗版软件的反思
- 【自由谈】城域网IPv6过渡技术——MAP技术(4)
- c++反射实现
- Java并发(4):线程的协作
- Unity3d vector3.forward和transform.forward的区别!
- 成功人生十大要点
- C#自定义异常类型的方法和注意项
- Android Activity之启动模式
- “org.hibernate.HibernateException: Hibernate Dialect must be explicitly set” 异常解决
- error LNK2005 已经在***.obj中定义 的解决办法
- 2.3-4
- 10个免费的jQuery富文本编辑器
- 利用sqoop把Mysql中的表数据导出到HDFS下的文本文件里