2016-02-21 41 views
0

我有可以轉向兩側的對撞機,我希望相機在玩家轉向一邊時旋轉。我使用的是Mathf.LerpAngle,但是當我按下按鍵轉身時,攝像頭正在循環旋轉。我該如何停止旋轉?如何在-90°之後停止LerpAngle的旋轉

問題是,每當我轉動球員應該去-90度向左+90,並會有更多的轉動,所以我不能使用函數來設置旋轉。

我已經設法使它停止,如果有聲明(lAngle> 90F)

float lAngle = Mathf.LerpAngle(minAngle, lMaxAngle, Time.deltaTime); 
float rAngle = Mathf.LerpAngle(minAngle, rMaxAngle, Time.deltaTime); 

Quaternion leftRotation = Quaternion.Euler(new Vector3 (0, lAngle, 0)); 
Quaternion rightRotation = Quaternion.Euler(new Vector3 (0, rAngle, 0)); 

transform.position = player.transform.position + offSet; 
transform.LookAt (player.transform); 

if (Input.GetKeyDown (KeyCode.LeftArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) { 
    turnLeft = true; 

} else if (Input.GetKeyDown (KeyCode.RightArrow) && GameObject.Find("Player").GetComponent<PlayerMovement>().turn) { 
    turnRight = true; 
} 

if(turnLeft) { 
    offSet = leftRotation * offSet; 
    transform.position = player.transform.position + offSet; 
    transform.LookAt (player.transform); 

    if (lAngle > 90f) 
     turnLeft = false; 
} 
if(turnRight) { 
    offSet = rightRotation * offSet; 
    transform.position = player.transform.position + offSet; 
    transform.LookAt (player.transform); 

    if (rAngle < -90f) 
     turnRight = false; 
} 

回答

0

另一種方法是使用Quaternion.RotateTowards,因爲這樣可以旋轉到負值沒有遊戲對象無限旋轉(因爲它不能接近負值)。下面你可以看到,我在存儲遊戲對象旋轉的初始值時,只要按下A或D鍵,就可以在修改此值之前將其作爲Vector3。然後將變換的旋轉設置爲Quaternion.RotateTowards的結果。

public class FixedRotate : MonoBehaviour 
{ 
    [SerializeField] 
    private float m_rotationAngle; 
    [SerializeField] 
    private float m_rotationSpeed; 
    private Vector3 m_targetRotation; 

    public void Start() 
    { 
     m_targetRotation = transform.eulerAngles; 
    } 

    public void Update() 
    { 
     //Left 
     if(Input.GetKeyDown(KeyCode.A)) 
      m_targetRotation.y -= m_rotationAngle; 
     //Right 
     if (Input.GetKeyDown(KeyCode.D)) 
      m_targetRotation.y += m_rotationAngle; 

     transform.rotation = Quaternion.RotateTowards(transform.rotation, Quaternion.Euler(m_targetRotation), m_rotationSpeed); 
    } 
} 

這個方法的不幸的事情是,你不能指定時間的旋轉取其中的對象將通過轉動量,只有增量值。另一種方法是使用Mathf.Clamp將Time.deltaTime/rotationTime添加到GameObject的現有y旋轉,並在達到+/- 90時停止。希望這有助於。