2015-06-21 63 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);