在我的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]返回角度,因此您的代码会因此而产生一些问题。
我建议让你的枪成为敌人的孩子,然后编码角度如下:
local letters = {DIN1="hi", AIN1= "my", AIN2 ="name", DIN2="is"}
for name, value in pairs(letters) do
print(name,value)
end