1、Transform旋轉
transform.Rotate(0, 90, 0);//分別繞X,Y,Z軸旋轉
transform.Rotate(Vector3.right * Time.deltaTime);//以歐拉角旋轉,順序是ZXY,right是向X軸旋轉1度
transform.Rotate(0, 45, 0, Space.World);//繞世界座標系的XYZ軸旋轉,也就是其頂層父物體的座標系,如果自身在頂層則沒有區別,並不是繞點旋轉,而是不按照自身的座標系旋轉
transform.Rotate(Vector3.up, Space.Self);//繞自身座標系旋轉,這是默認的
transform.RotateAround(Vector3.zero, Vector3.up, 20 * Time.deltaTime);//繞點旋轉,旋轉軸,角度
transform.rotation = Quaternion.identity;//旋轉可由四元數直接指定
transform.eulerAngles = new Vector3(angle);//由歐拉角直接指定
自動旋轉:
在update中旋轉並配合Time.deltaTime即可
2.Quaternion四元數
· AngleAxis(angle : float, axis : Vector3) 繞axis軸旋轉angle,創建一個旋轉。
· Angle (a : Quaternion,b : Quaternion) 返回a和b兩者之間的角度。
· Dot點乘 用法同上
· eulerAngles 返回表示旋轉的歐拉角度。
· Euler (x : float,y : float, z : float) 用於返回一個指定的歐拉角,需要使用歐拉角表示旋轉時很有用
· FromToRotation (fromDirection :Vector3,toDirection : Vector3) 從from到to創建一個旋轉(計算出旋轉的四元數)
· identity相當於“無旋轉”:即這個物體完全對齊於世界或父軸。
· Inverse 返回反向的旋轉。
· Lerp插值
· LookRotation注視旋轉
· operator !=運算符 不等於
· operator *運算符 乘法
· operator ==運算符 等於
· Quaternion構造四元數
· RotateTowards轉向
· SetFromToRotation從from到to的旋轉
· SetLookRotation注視旋轉
· Slerp球形插值
· this [int index]操作索引
· ToAngleAxis 轉換一個旋轉用“角-軸”表示。
· ToString轉字符串
· wW組件
· xX組件
· yY組件
· zZ組件
從以上可以看出我們既可以按角-軸旋轉也可以根據向量計算出要旋轉的角度
平滑旋轉:
transform.rotation = Quaternion.Slerp (from : Quaternion, to : Quaternion,Time.fixedTime* smooth);
Lerp插值比Slerp更快但是如果旋轉較遠看起來就比較差。
注視旋轉:
Quaternion LookRotation(Vector3 forward, Vector3 upwards);
創建一個旋轉,沿着forward(z軸)並且頭部沿着upwards(y軸)的約束注視。 也就是建立一個旋轉,使z軸朝向forward,y軸朝向up。
所得的結果是 以forward爲目標朝向時的旋轉角,用於控制角色旋轉很有用
3.剛體旋轉
rigidbody.MoveRotation (rot : Quaternion)
對於運動學剛體,它基於剛體的運動應用摩擦力。模擬剛體的旋轉。
如果你想其他的剛體與運動學剛體交互,你需要在FixedUpdate函數中使用它。
4.注視
transform.LookAt (target : Transform, worldUp : Vector3 = Vector3.up)
旋轉物體使z軸(forward)指向目標物體。
當該物體設置了LookAt並指定了目標物體時,該物體的z軸將始終指向目標物體,在設置了worldUp軸向時,該物體在更接近指定的軸向是旋轉便的靈活,注意worldUp指的是世界空間,不論你物體在什麼位置,只要接近指定的軸方向,旋轉會變的更靈活。
另記:unity中旋轉rotation默認是以四元數存儲的,按我們的習慣是歐拉角,通常需要將歐拉角轉爲四元數