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

Unity3d vector3.forward和transform.forward的区别!相关推荐

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

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

  2. vector3.forword和transform.forword在移动上的区别

    本文转载自http://blog.csdn.net/kaluluosi111/article/details/17206655,,,,,,,在unity3d中有2个forward,一个是vector3 ...

  3. Unity3d bounds包围盒 和collider碰撞器区别

    Bounds 外包围盒 Bounds 叫作外包围盒.边界框.外扩矩形.是struct 结构体.而我们获得Bounds的主要途径有三种:Render,Collider,Mesh. Render.boun ...

  4. Transform.Forward和Vector3.Forward的正确使用方法

    Transform.Forward和Vector3.Forward的正确使用方法 发布:Unity3d培训 来源:unity3d培训教程 2016-07-23 浏览次数:3465 很多人对于Trans ...

  5. forward和redirect有什么区别?

    题目:下面有关forward和redirect的描述,正确的是() ? A.forward是服务器将控制权转交给另外一个内部服务器对象,由新的对象来全权负责响应用户的请求 B.执行forward时,浏 ...

  6. java中forward和redirect_java中转发forward和重定向redirect的区别

    Forward(转发) 是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是 ...

  7. Vector3基础和Transform位置

    游戏对象(GameObject)位移.旋转.缩放.父子关系.坐标转换等相关操作都由Transform处理 1.Vector3基础 Vector3主要用来表示三维坐标系中的一个点或者一个向量 // 声明 ...

  8. zoom和transform:scale()的区别

    文章目录 1. 兼容行区别 2. 控制缩放的属性值不一样 3. zoom缩放会将元素保持在左上角,而scale默认是中间位置,可以通过transform-origin来设置 4. 对文字的缩放规则不一 ...

  9. 计算机英语forward,勇往直前:forward的用法解析

    Part of being optimistic is keeping one's head pointed toward the sun, one's feet moving forward. -- ...

最新文章

  1. TCP/UDP协议基本概念
  2. scrapy的name变量_Python3 Scrapy框架学习四:爬取的数据存入MongoDB
  3. PL/SQL 处理流程
  4. java 面试心得总结-BAT、网易
  5. Java Memory Model
  6. 通过git将本地代码上传码云
  7. 最全的CSS浏览器兼容问题(转至http://68design.net/Web-Guide/HTMLCSS/37154-1.html)
  8. 【Flink】Flink Table 基于Processing Time、Event Time的多种Window实现
  9. 设计模式(Python)-观察者模式
  10. python下载大文件mp4_Python 下载 m3u8 格式视频
  11. 用计算机进行有理数除法时,《有理数的乘除法》的教案
  12. 街机模拟器 WinKawaks 及街机 ROM 下载
  13. 计算机管理员账户停用,win10系统提示“你的账户已被停用,请向系统管理员咨询”如何解决...
  14. 添加打印机无法搜索计算机,添加打印机搜索不到打印机怎么办
  15. 甲乙2个人去买冬瓜,甲买差7元,乙买差9元,合买差1元,冬瓜多少钱?
  16. 【今晚7点】:以歌会友,对话腾讯音乐天琴实验室 X 银河音效
  17. android 开源 高斯模糊_Android高斯模糊、高斯平滑(Gaussian Blur)【1】
  18. MAC 下Sublime text 同时编辑多行内容
  19. 【5G系列】MICO学习总结(3)
  20. 穷举法:一道爱因斯坦的数学题

热门文章

  1. Git Tortoisegit的基础安装与登录
  2. 从Flink SQL doesn't support consuming update and delete changes 错误谈起
  3. vue项目你一定会用到的性能优化!
  4. 机器学习第四篇----MAB(多臂老虎机)一次失败的尝试
  5. 书蕴——基于书评的人工智能推荐系统
  6. 《Android Studio 实战》总结一
  7. #学习笔记4#软件测试基础——测试阶段划分、黑盒测试的一些知识
  8. 【国产开源】兼容redis协议的内存数据库
  9. java添加zip并下载,java - 使用java创建zip并使其可下载。 - SO中文参考 - www.soinside.com...
  10. Element UI是什么?基本用法