Unity3d vector3.forward和transform.forward的区别!

原文连接:

http://blog.csdn.net/kaluluosi111/article/details/17206655

在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。

时间: 2024-10-15 03:22:44

Unity3d vector3.forward和transform.forward的区别!的相关文章

Unity 3D中的Transform.Rotate 与Transform.RotateAround 的区别

Transform.Rotate 旋转 应用一个欧拉角的旋转角度,eulerAngles.z度围绕z轴,eulerAngles.x度围绕x轴,eulerAngles.y度围绕y轴(这样的顺序). 如果相对于留空或者设置为Space.Self 旋转角度被应用围绕变换的自身轴.(当在场景视图选择物体时,x.y和z轴显示)如果相对于 Space.World 旋转角度被应用围绕世界的x.y.z轴. 1 gameObject.transform.Rotate(new Vector3(0,1,0),Inpu

javaweb中重定向和请求转发(response.sendRedirect()和request.getRequestDispatcher(rul).forward(request,response)))的区别

先来两张图,方便理解: 可以看出,重定向时,是服务器向游览器重新发送了一个response命令,让游览器再次向url2发送请求,以获取url2的资源 而请求转发时,类似于是服务器自己向自己发了一个跳转,然后将结果直接给游览器,这也是问什么游览器会不改变url地址.下面是具体总结他们的区别 一.response.sendRedirect(url)-服务器将新url发送给游览器,游览器再根据新url请求 Request.getRequestDispatcher(url).forward(reques

【Servlet】Servlet之forward、sendRedirect、 include区别与使用

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka servlet中的请求转发主要有三种方式:1. forward:是指转发,将当前request和response对象保存,交给指定的url处理.并没有表示页面的跳转,所以地址栏的地址不会发生改变.2. redirect:是指重定向,包含两次浏览器请求,浏览器根据url请求一个新的页面,所有的业务处理都转到下一个页面,地址栏的地址会变发生改变.3. include:意为包含,即包含url中的内

转发(Forward)和重定向(Redirect)的区别

转发是服务器行为,重定向是客户端行为. 转发(Forword) :通过RequestDispatcher对象的forward(HttpServletRequest request,HttpServletResponse response)方法实现的. RequestDispatcher 可以通过HttpServletRequest 的 getRequestDispatcher()方法获得.例如下面的代码就是跳转到 login_success.jsp 页面. request.getRequestD

Unity3d关于Gameobject ,gameObject,Transform,transform的区别和关联的一些个人理解

关于Gameobject与gameObject Gameobject是一个类型,所有的游戏物件都是这个类型的对象. gameobject是一个对象, 指的是这个脚本所附着的游戏物件. 关于Transform与transform Transform是一个类,用来描述物体的位置,大小,旋转等等信息. transform是Transform类的对象,依附于每一个物体.也是当前游戏对象的一个组件(每个对象都会有这个组件). 关于gameObject.transform与transform.gameObj

unity3d Vector3.Lerp解析

Vector3.Lerp:http://www.ceeger.com/Script/Vector3/Vector3.Lerp.html 手册中描述的不是很详细,什么叫“按照数字t在from到to之间插值”???t代表什么鬼?还得自己测试一下才知道 我以前这样用过: from.position = Vector3.Lerp(from.position, to.position, Time.deltaTime); 或者想要快一些我就这样: from.position = Vector3.Lerp(f

unity3d中StreamingAssets和Resources目录的区别

刚学unity3的人,肯定会对这两个目录非常困惑,知道他们都是只读的.Resources会加密,StreamingAssets不加密,但是在使用上到底有怎样的不同,却不太说得清楚. 我在用了unity3d有一段时间后,在研究AssetBundle及播放音频的时候,总算是弄清了他们的区别.当时是想播放一段音频,于是我把资源放在StreamingAssets目录下,用WWW加载a.ogg,然后并没有得到我想要的结果.但是放在Resources目录下面,Resources.Load()却能播放.后来经

Unity3D脚本中Start()和Awake()的区别对比分析

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. Unity3D初学者经常把Awake和Start混淆. 简单说明一下,Awake在MonoBehavior创建后就立刻调用,Start将在MonoBehavior创建后在该帧Update之前,在该Monobehavior.enabled == true的情况下执行. void Awake (){

unity3d中C#与JS的一些区别

unity3d目前支持C#和JS两种脚本语言. 学习过程中发现很多教程使用的是JS语言,自己还是用C#比较多,unity原生使用的是Mono,使用C#会更加接近unity的编程思想. 1.方法的定义,C#为强类型语言,所有的类型都必须明确标注:javascript为弱类型语言. (强弱类型应该不用解释吧(╯‵□′)╯︵┻━┻) String GetSomething(int arg){ return "Something"; } function GetSomething(var ar