指向玩家的枪不起作用

时间:2015-06-21 17:18:45

标签: unity3d

在我的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);
    }
}

1 个答案:

答案 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