如果想完全,详细的了解四元素,可以看清华妹子的文章
http://blog.csdn.net/candycat1992/article/details/41254799
其他人的博客好像也没有说很清楚
清华妹子的这个文章现在有12W的浏览量,反正我是三年前看的,3年前没懂,3年后也没懂
反正unity3d里面的用法就是2个
第一个用法是:2个对象的面对面,敌人面对玩家,或者玩家瞄准敌人
Quaternion rotate = Quaternion.LookRotation (_player.transform.position - transform.position ,Vector3.up);
Vector3 dir = _player.transform.position * 0.95f - transform.position;
GameObject obj = vp_Utility.Instantiate (Bullect, transform.position, Quaternion.Euler (dir)) as GameObject;
网上说这么写,其实应该2个变量调转的,我的测试结果是射线45度向上的,不知为可(按我的理解应该是reverse)
transform.position - target.position但其实根据我的理解的矢量运算,应该确实是2个变量调换
应该是,target 矢量- source矢量
结果我的target 是 _player,
所以,_player.transform.position - transform.position
结果是我的需求,没毛病
这个问题搞了半天,就一个面对面问题,从中午搞到凌晨一点多,终于用LookRotation 方法搞定,机智如我,马上开个方便面助助兴
第二个用法是:四元数乘以三维矢量
1.计算angent的人物目标向量和人物当前转向向量,之间的夹角
Vector3 velocity = Quaternion.Inverse(transform.rotation) * agent.desiredVelocity;
float angle = Mathf.Atan2(velocity.x, velocity.z) * 180.0f / 3.14159f;
2.最最普通的设置人物旋转
Quaternion.Euler (0, currentRotationAngle, 0);
3.很简单的朝向改变 ,下面代码中,lastDirection是摄像机向前的射线向量,重点是LookRotation()方法,意思明显就是获取和摄像机向量相同的四元数
Hololance.rotation = Quaternion.AngleAxis(0,Vector3.right);
Hololance.rotation = Hololance.rotation* Quaternion.LookRotation( lastDirection);
这么写,应该是等价的,多个四元数相乘
Hololance.rotation = Quaternion.AngleAxis(0,Vector3.right) * Quaternion.LookRotation( lastDirection);
关于四元数的一些深入测试研究
worldRotation = Quaternion.AngleAxis(deltaRotation, camera.transform.forward) * worldRotation;
我碰到的第一问题就是四元数相乘,到底是什么意思呢
矢量和矢量的乘积,可以构成新的标量
而四元数的乘积又是怎么一回事呢?
可以从下面这个哥们的博文,反推一点四元数知识,但其实他也写不怎么好,他是想做一个测试是,但是文章一开头确说四元数乘以矢量,也就是四元数乘三维矢量,不知道他是到底搞清楚了没有
http://www.cnblogs.com/hont/p/5958167.html