mouselook-物體跟隨滑鼠旋轉
- 前言
- 一、mouselook
- 1.1、用于旋轉
- 1.2、水平旋轉
- 1.3、垂直旋轉
- 1.4、水平+垂直旋轉
- 二、測驗效果
前言
這是本人玩unity的回顧,一些腳本分享
一、mouselook
1.1、用于旋轉
考慮到有三種不同型別的旋轉行為(水平轉、垂直轉、水平+垂直),就相當于旋轉包括這三類,于是用列舉定義三者(列舉型別是一種值型別,它用于宣告一組命名的常數)
public enum RorationAxes //定義列舉資料結構,將名稱和設定結合起來
{
MouseXAndY = 0,
MouseX = 1,
MouseY = 2
}
宣告一個該列舉的公有變數,這將在Inspector中顯示下拉選單
public RorationAxes axes = RorationAxes.MouseXAndY;
1.2、水平旋轉
void Update () {
if (axes==RorationAxes.MouseX)
{
transform.Rotate(0, Input.GetAxis("Mouse X") * sensitivityHor, 0);
}
1.3、垂直旋轉
Rotate()方法只能用于沒有限制的增加旋轉值,適合水平轉
但是垂直轉需要限制視野上下傾斜的程度
_rotationX-----垂直繞X軸旋轉可以保持角度
public float sensitivityVert = 9.0f;//垂直轉
public float miniumVert = -45.0f;
public float maxinumVert = 45.0f;
public float _rotationX = 0;//為垂直角度宣告一個角度變數,X代表X軸
//Mathf.Clamp用于將旋轉角度保持在最小值和最大值之間
//Clamp()方法不止用于旋轉,他通常用于確保一個數值變數在限制的范圍內
else if (axes == RorationAxes.MouseY)
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, miniumVert, maxinumVert);
float rotationY = transform.localEulerAngles.y;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
由于transform的angle屬性是Vector3,因此需要把旋轉角度值傳給建構式,創建一個新的Vector3
歐拉角(Euler angle)和四元數(Quaternion)
參考www.flipcode.com/documents/matrfaq.html-Q47
1.4、水平+垂直旋轉
else
{
_rotationX -= Input.GetAxis("Mouse Y") * sensitivityVert;
_rotationX = Mathf.Clamp(_rotationX, miniumVert, maxinumVert);
float delat = Input.GetAxis("Mouse X") * sensitivityHor;//delat------是旋轉的變化量
float rotationY = transform.localEulerAngles.y + delat;
transform.localEulerAngles = new Vector3(_rotationX, rotationY, 0);
}
}
//使用delat遞增旋轉角度
void Start()
{
Rigidbody body = GetComponent<Rigidbody>();
if (body != null)
body.freezeRotation = true;
}
代碼如下(示例):
這段代碼:
滑鼠輸入腳本通常在玩家的Rigidbody上設定freezeRotation屬性,
if (body != null)用于檢測這個組件是否存在
二、測驗效果
程式是之前跟著一本Unity虛擬現實弄的,
介于我目前不止如何弄動圖先不放,
如有問題,請各位大佬多多指點,感謝啦!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/231440.html
標籤:其他
上一篇:一、本地專案部署到GitHub上
