物體的旋轉

1.1物體的旋轉

1.1.1對象的旋轉方式

(1)transform.Rotate

應用一個歐拉角的旋轉角度,eulerAngles.z度圍繞z軸,eulerAngles.x度圍繞x軸,eulerAngles.y度圍繞y軸。

transform.Rotate(Vector3.right*Time.deltaTime);//默認繞自身坐標軸轉transform.Rotate(Vector3.up*Time.deltaTime,Space.World);//繞世界坐標軸

transform.Rotate(Time.deltaTime, 0, 0);//圍繞x軸每秒1度慢慢的旋轉物體

transform.Rotate(Vector3.right,Time.deltaTime);//圍繞x軸每秒1度,慢慢的旋轉物體

(2)Transform.rotation

在世界空間坐標物體變換的旋轉角度作為Quaternion儲存。

Quaternion.identity就是指Quaternion(0,0,0,0),就是每旋轉前的初始角度,是一個確切的值,而transform.rotation是指本物體的角度,值是不確定的,比如可以這么設置transform.rotation = Quaternion.identity;

一個是值類型,一個是屬性變量。

float tiltAroundZ =Input.GetAxis("Horizontal") * tiltAngle;float tiltAroundX =Input.GetAxis("Vertical") * tiltAngle;Quaternion target =Quaternion.Euler(tiltAroundX, 0, tiltAroundZ);

//通過一定的時間,從自身角度轉向target目標角度。

transform.rotation =Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth);

(3)transform.localEulerAngles

旋轉作為歐拉角度,相對于父級的變換旋轉角度。

rotationY += Input.GetAxis("Mouse Y") * sensitivityY;

//經過測試,如果這里沒用+=那么會轉不動

rotationY = Mathf.Clamp (rotationY, minimumY, maximumY);

//上面的Clamp是為了顯示rotationY的旋轉范圍

transform.localEulerAngles = new Vector3(-rotationY, transform.localEulerAngles.y, 0);

(4)transfomr.eulerAngles

transform.eulerAngles = newVector3(x, y,z);

x、y、z角代表繞z軸旋轉z度,繞x軸旋轉x度,繞y軸旋轉y度。不要分別設置歐拉角其中一個軸(例如:eulerAngles.x = 10;),因為這將導致偏移和不希望的旋轉。當設置它們一個新的值時,要同時設置全部,如上所示。

1.1.2旋轉示例

(1)鼠標拖拽示例

public class SpinWithMouse : MonoBehaviour

{

public float speed = 0.3f;

private Vector3 mousePos;

//使用OnMouseDown方法時,需要在被拖拽物體身上掛上碰撞體

IEnumerator OnMouseDown()

{

//記錄鼠標點擊時的位置

mousePos = Input.mousePosition;

while (Input.GetMouseButton(0))

{

//鼠標拖拽后的位置

Vector3 offset = mousePos - Input.mousePosition;

float x = Input.mousePosition.x - mousePos.x;

float y = Input.mousePosition.y - mousePos.y;

x = Mathf.Abs(x);

y = Mathf.Abs(y);

//當x方向移動量比y方向多時只執行旋轉x軸

if (x > y)

{

transform.Rotate(Vector3.up * offset.x * speed, Space.World);

}

//當y方向移動量比x方向多時只執行旋轉y

if (y > x)

{

transform.Rotate(Vector3.forward * offset.y* speed, Space.Self);

}

//重新獲取鼠標坐標軸

mousePos = Input.mousePosition;

yield return null;

}

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 該系列筆記基于Unity3D 5.x的版本學習,部分API使用和4.x不一致。 目前在Unity3D中,除了新的U...
    某人在閱讀 2,417評論 0 2
  • 這是今天的成果吧,雖然還是沒有全部完成,但是大致的功能已經實現,飛機的移動,限制移動范圍,子彈的發射,消滅敵人,敵...
    Unity學習的路上閱讀 2,866評論 1 2
  • 今天是傳說中的雙11,很多人購物瘋狂,對我來說,無感。 沒有買東西,甚至故意躲開這個日子,怕物流會堵塞,怕買到的東...
    真冉閱讀 163評論 0 0
  • 心得整理2016 一、戰略類 1、更新社會關系,與讓自己強大一樣重要 2、人的成功往往是看把自己放到什么樣的環境里...
    wilapad閱讀 433評論 0 0
  • 聽風輕敲窗玻璃 在初冬的薄涼里 天快要亮了 碾過歲月的年輪 終是老了容顏 昔日的青絲年少 在不留意時走丟 喜歡被愛...
    田萍閱讀 157評論 0 10