Unity3d 指向玩家的枪不';行不通

Unity3d 指向玩家的枪不';行不通,unity3d,Unity3d,在我的2D平台中,有一个飞行的敌人,他有一把枪。根据敌人面对的方向,火炮在Z轴上的位置为0°或180°。枪可以任意移动30°。当敌人面朝右时,它工作正常,但当敌人面朝左时,当它达到180°时,它会重置为150°。有人能帮忙吗?这是我的密码: 使用UnityEngine; 使用系统集合; 公共级EnemyGun:单一行为 { 公共转换播放器; 私人厕所; 私有无效更新() { if(player.position.x-transform.position.x30&&isRight==真) { 角度

在我的2D平台中,有一个飞行的敌人,他有一把枪。根据敌人面对的方向,火炮在Z轴上的位置为0°或180°。枪可以任意移动30°。当敌人面朝右时,它工作正常,但当敌人面朝左时,当它达到180°时,它会重置为150°。有人能帮忙吗?这是我的密码:

使用UnityEngine;
使用系统集合;
公共级EnemyGun:单一行为
{
公共转换播放器;
私人厕所;
私有无效更新()
{
if(player.position.x-transform.position.x<0)
{
isRight=false;
}
其他的
{
isRight=正确;
}
Vector3 dir=player.position-transform.position;
浮动角度=数学Atan2(方向y,方向x)*数学Rad2Deg;
如果(角度>30&&isRight==真)
{
角度=30;
}
如果(角度<-30&&isRight==真)
{
角度=-30;
}
如果(角度>210&&isRight==假)
{
角度=210;
}
如果(角度<150&&isRight==false)
{
角度=150;
}
transform.rotation=四元数.AngleAxis(角度,矢量3.向前);
}
}

< /代码> 您可能想考虑一个不同的设计。如果你让你的枪成为敌人单位对象的子对象,那么你只需要处理1个角度范围

您可能还希望了解这一点,以便于实现

要直接回答您的问题:

Atan2将从[-PI,PI]返回角度,因此您的代码将因此产生一些问题

我建议把你的枪变成敌人的孩子,然后把角度编码如下:

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

请不要在问题标题中使用任何标记