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轴方向,是一个向量,而不是一个 ...
随机推荐
- 定期批量修改远程服务器root密码
一.背景 很多时候运维或安全工作人员需要维护大量的服务器,其中就包括判断是否存在root弱口令, 如果服务器数量很多一一修改的话的确是要好花费不少时间精力的.如果通过脚本来实现密码更改, 再做一个定期 ...
- (原创)如何使用boost.asio写一个简单的通信程序(一)
boost.asio相信很多人听说过,作为一个跨平台的通信库,它的性能是很出色的,然而它却谈不上好用,里面有很多地方稍不注意就会出错,要正确的用好asio还是需要花一番精力去学习和实践的,本文将通过介 ...
- ROC曲线(Receiver Operating Characteristic Curve)
分类模型尝试将各个实例(instance)划归到某个特定的类,而分类模型的结果一般是实数值,如逻辑回归,其结果是从0到1的实数值.这里就涉及到如何确定阈值(threshold value),使得模型结 ...
- windows操作系统自带的TCP端口转发
假定需要通过192.168.1.8的14941端口连接192.168.1.118的1494端口,则需要在192.168.1.8主机的命令行输入如下语句netsh interface ipv6 ins ...
- PostgreSQL获取table名,字段名
PostgreSQL获取数据库中所有table名: SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablena ...
- Python安装pycurl失败,及解决办法
Centos安装pycurl centos 安装pycurl yum install python-devel curl-devel pip3 install pycurl Mac(老版本)安装pyc ...
- html5 class
指向样式表中的类比如<span class="left_menu important">...</span>表示这个span的样式,由样式表中的left_m ...
- 软链接ln -s以及如何解决其产生“Too many levels of symbolic links ”的错误?
Q1:如何利用ln -s来创建快捷方式? A1:ln(link,链接文件): Windows中的快捷方式,实际上快捷方式和它指向的文件是独立的两个文件,两个都占硬盘空间,只不过用户访问快捷方式时,其效 ...
- virsh的详细命令解析(一)
virsh的详细命令解析 virsh 有命令模式和交互模式如果直接在vrish后面添加参数是命令模式,如果直接写virsh,就会进入交互模式 virsh list 列出所有的虚拟机,虚拟机的状态有(8 ...
- 解决hibernate向mysql插入中文乱码问题(转)
转载自:http://blog.csdn.net/peditable/article/details/7047573 1.首先需要修改MySQL数据库的配置文件my.ini,此文件放在mysql根目录 ...