2015-06-21 70 views
0

在我的2D平臺遊戲中,有一名擁有槍支的飛行敵人。根據敵人面對的方式,槍在Z軸上的座標爲0°或180°。無論哪種方式,槍都可以自由移動30°。當敵人朝右時,它可以很好地工作,但當敵人朝左時,它會在180°時重置爲150°。任何人都可以幫忙嗎?這裏是我的代碼:指向玩家的槍不起作用

using UnityEngine; 
using System.Collections; 

public class EnemyGun : MonoBehaviour 
{ 
    public Transform player; 
    private bool isRight; 

    private void Update() 
    { 
     if (player.position.x - transform.position.x < 0) 
     { 
      isRight = false; 
     } 
     else 
     { 
      isRight = true; 
     } 

     Vector3 dir = player.position - transform.position; 
     float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg; 

     if (angle > 30 && isRight == true) 
     { 
      angle = 30; 
     } 

     if (angle < -30 && isRight == true) 
     { 
      angle = -30; 
     } 

     if (angle > 210 && isRight == false) 
     { 
      angle = 210; 
     } 

     if (angle < 150 && isRight == false) 
     { 
      angle = 150; 
     } 

     transform.rotation = Quaternion.AngleAxis(angle, Vector3.forward); 
    } 
} 
+0

請不要在問題的標題使用任何標籤 –

回答

0

你可能想考慮一個不同的設計。如果你讓你的槍是敵方單位物體的孩子,那麼你只需要處理1個角度範圍。

你也可能想看看http://docs.unity3d.com/ScriptReference/Transform.LookAt.html這個更容易實現。

直接回答你的問題:

Mathf.Atan2將從[-PI,PI]返回的角度讓你的代碼將給予一定的問題,只是因爲這個。

我建議讓你的槍的敵人的孩子,然後編碼角度如下:

// using your angles in the question 
angle = Mathf.Abs(angle); // only need positive angles. 
angle = Mathf.Clamp(angle, 30, 150);