[英]2D rotation and collision detection in Unity3d with C# Script
我有一個游戲對象,一個黃色圓圈(在此圖片中顯示為我的玩家對象),紅色圓圈是我的玩家對象的孩子。
然后,如果我按空格鍵一次,它將像這樣旋轉-90度
問題是當我按兩次空格鍵時,播放器旋轉完美,但卡住並繼續振動並擊中粉紅色塊。我的問題是,如何修改腳本以使播放器知道它只能旋轉一次並防止如果由於粉紅色塊而我按空格鍵,則播放器無法再次旋轉,將阻止旋轉。
這是我的Player旋轉腳本。
public GameObject objToRotate; private bool rotating = false; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Input.GetKeyDown (KeyCode.Space)) { StartRotation (); } } private IEnumerator Rotate(Vector3 angles, float duration) { rotating = true; Quaternion startRotation = objToRotate.transform.rotation; Quaternion endRotation = Quaternion.Euler (angles) * startRotation; for (float t = 0; t < duration; t += Time.deltaTime) { objToRotate.transform.rotation = Quaternion.Lerp (startRotation, endRotation, t / duration); yield return null; } objToRotate.transform.rotation = endRotation; rotating = false; } public void StartRotation() { if (!rotating) StartCoroutine (Rotate (new Vector3 (0, 0, -90), 1.1f)); }
對不起,如果我英語不好。 每個意見和幫助都非常感謝。
如果您希望協程僅運行一次,則可以像這樣修改它
public GameObject objToRotate;
private bool rotating = false;
// Use this for initialization
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Space) && !rotating)
{
StartRotation();
}
}
private IEnumerator Rotate(Vector3 angles, float duration)
{
rotating = true;
Quaternion startRotation = objToRotate.transform.rotation;
Quaternion endRotation = Quaternion.Euler(angles) * startRotation;
for (float t = 0; t < duration; t += Time.deltaTime)
{
objToRotate.transform.rotation = Quaternion.Lerp(startRotation, endRotation, t / duration);
yield return null;
}
objToRotate.transform.rotation = endRotation;
}
public void StartRotation()
{
if (!rotating)
StartCoroutine(Rotate(new Vector3(0, 0, -90), 1.1f));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.