unity------------------------------transform.forward与Vector.forward的区别
在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的区别的更多相关文章
- [Unity Shader笔记]渲染路径--Forward渲染路径
[Unity Shader笔记]渲染路径--Forward渲染路径 (2014-04-22 20:08:25) 转载▼ 标签: shader unity renderingpath forward 游 ...
- C++面试题:list和vector有什么区别?
原文:http://genwoxuevc.blog.51cto.com/1852984/503337 C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★ ...
- Forward reference vs. forward declaration
Q:Im a bit confused. What is the difference between forward declaration and forward reference? Forwa ...
- JDK源码看ArrayList和Vector的一些区别
最近在看JDK源码,从源码的角度记录一下ArrayList和Vector的一些区别 1.new a.不指定长度 Vector默认创建10个元素的数组 public Vector() { this(10 ...
- C++面试题:list和vector有什么区别
C++面试题:list和vector有什么区别?考点:理解list和vector的区别出现频率:★★★★解析:vector和数组类似,它拥有一段连续的内存空间,并且起始地址不变,因此它能非常好的支持随 ...
- CSS动画详解及transform、transition、translate的区别
刚看完一节慕课网的css动画,在此总结下 1. 先说下 transform.transition.translate的区别 transform 和 transition是css的2个属性,transl ...
- Unity3d Transform.forward和Vector3.forward的区别!
在Unity中有两个forward,一个是Transform.forward一个是Vector3.forward. 对于Vector3来说,它只是缩写.没有其它任何含义. Vector3.forwar ...
- javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别
先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转 ...
- transform.forward和vector3.forward
Vector3.forward的值永远是(0,0,1)(这里的(0,0,1)是世界坐标的(0,0,1)),而transform.forward我们可以理解为其对应物体的z轴方向,是一个向量,而不是一个 ...
随机推荐
- (原创)用C++11的std::async代替线程的创建
c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的: void f(int n); std::thread t(f, n + ); t.join(); 但是线程毕竟是属于比较 ...
- C++ struct 和 Class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能!!! struct能继承吗? 能!! ...
- (转)大白话讲解如何给github上项目贡献代码
转自:https://site.douban.com/196781/widget/notes/12161495/note/269163206/ 2013-03-30 22:53:55 本文献给对g ...
- Is there a way to get a Cursor from a GreenDao Query object?
转:http://stackoverflow.com/questions/13584876/is-there-a-way-to-get-a-cursor-from-a-greendao-query-o ...
- LeetCode: N-Queens II 解题报告
N-Queens II (LEVEL 4 难度级别,最高级5) Follow up for N-Queens problem.
- JAVA-数据库之Statement对象
相关资料:<21天学通Java Web开发> 语句对象Statement1.语句对象Statement可以用来执行SQL语句,从而实现数据库操作.2.可以通过调用连接对象的createSt ...
- php中的后期静态绑定
后期静态绑定PHP手册 使用的保留关键字: static 定义: static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的.也可以称之为"静态绑定",因为它可以用 ...
- C语言 · x的x次幂结果为10
如果x的x次幂结果为10(参见[图1.png]),你能计算出x的近似值吗? 显然,这个值是介于2和3之间的一个数字. 请把x的值计算到小数后6位(四舍五入),并填写这个小数值. 注意:只填写一个小数, ...
- ExecutorService中submit和execute的区别<转>
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动.调度.管理线程的一大堆API了.在Java5以后,通过Executor来启动线程比用Thread的start()更好.在新特征中 ...
- 工具软件 PYUV打开raw图片
引自:http://blog.csdn.net/lavenderss/article/details/51495648 [pYUV]如何打开YUV/RGB图片 pYUV工具本身使用起来比较简单,但如果 ...