牛骨文教育服务平台(让学习变的简单)
博文笔记

unity小总结

创建时间:2018-10-26 投稿人: 浏览次数:365

四元数旋转问题

在Unity里,欧拉旋转的旋转顺序是Z、X、Y,这在相关的API文档中都有说明,例如Transform.Rotate。其实文档中说得不是非常详细,还有一个细节我们需要明白。如果你仔细想想,就会发现有一个非常重要的东西我们没有说明白,那就是旋转时使用的坐标系。给定一个旋转顺序(例如这里的Z、X、Y),以及它们对应的旋转角度(α,β,r),有两种坐标系可以选择:
1.绕坐标系E下的Z轴旋转α,绕坐标系E下的Y轴旋转β,绕坐标系E下的X轴旋转r,即进行一次旋转时不一起旋转当前坐标系;
2.绕坐标系E下的Z轴旋转α,绕坐标系E在绕Z轴旋转α后的新坐标系E"下的Y轴旋转β,绕坐标系E"在绕Y轴旋转β后的新坐标系E""下的X轴旋转r, 即在旋转时,把坐标系一起转动;

很容易知道,这两种选择的结果是不一样的。但如果把它们的旋转顺序颠倒一下,其实结果就会一样。说得明白点,在第一种情况下、按ZXY顺序旋转(世界坐标系旋转)和在第二种情况下、按YXZ顺序旋转是一样的(自身坐标系旋转)。证明方法可以看下这篇文章。而Unity文档中说明的旋转顺序指的是在第一种情况下的顺序。

transform.Roate 默认是自身坐标新,按照YXZ顺序旋转和一起旋转是一样的效果。
--------------------- 
作者:妈妈说女孩子要自立自强 
来源:CSDN 
原文:https://blog.csdn.net/candycat1992/article/details/41254799 
版权声明:本文为博主原创文章,转载请附上博文链接!

位移问题

transform.position+= 是按照世界坐标系进行的

transform.translate 默认的是自身坐标系

接下来我们讲一讲,Vector3.forward和transform.forward的区别,Vector3.forward的值永远是(0,0,1)(这里的(0,0,1)根据是Space.self还是world),而transform.forward我们可以理解为其对应物体的z轴方向,是一个向量,而不是一个坐标,但是我们应当把它看成世界坐标系内的,而不是局部坐标系内的。而transform的属性可以在我上面提到的对比来思考。是继承关系。

 

想要让物体向前移动,在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。

有些同学可能不太理解以上部分的含义,没关系,我们可以先记住,在后面自然就懂了。但我这里还是要讲一下。

对于translate(a,b)函数,如果省略b,系统将把它缺省为space.self,意思是在自身坐标系进行a向量方向的移动,如果b为space.world,那么物体就在世界坐标系上进行a向量方向的移动。还是不懂得话大家可以自己写一个小Demo试验一下,不要怕麻烦,学习从来没有捷径。

最后,总结一下,除了translate这种比较特殊的函数,其他的,比如SimpleMove,DrawLine等,如果要在游戏物体前方进行操作,一概使用transform.forward,但是要注意,他只是个模为1的向量,别忘了根据自己的需求灵活变化,这里需要大家自行体会!

参考:https://blog.csdn.net/kaluluosi111/article/details/17206655

          https://blog.csdn.net/ithot/article/details/68485587
--------------------- 
作者:烟雨迷离半世殇 
来源:CSDN 
原文:https://blog.csdn.net/qq_15020543/article/details/80777249 
版权声明:本文为博主原创文章,转载请附上博文链接!

延时处理函数:

销毁的时候,可以用destroy(“”,延时时间),另外destroy还有一个立即销毁,永远删除的,destroyImmediate

延时invoke和invokerepeating。

另外还可以考虑协程。

 

 

 

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。