zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    小公司的程序员,老想跳槽怎么办?
    阿里出品的最新版 Java 开发手册,嵩山版,扫地僧
    程序员的“三十而已”
    应届毕业生,只会抄代码,该怎么办?
    可笑,你竟然不知道 Java 如何生成 UUID
    因为不知道Java的CopyOnWriteArrayList,面试官让我回去等通知
    保姆级教程,如何发现 GitHub 上的优质项目?
    给我半首歌的时间,给你说明白Immutable List
    十分钟色彩科学:LUT 的前世今生
    无源与有源元件的区别
  • 原文地址:https://www.cnblogs.com/nsky/p/4608444.html
Copyright © 2011-2022 走看看