首页 > 解决方案 > 如何检测游戏对象是在玩家的左侧还是右侧

问题描述

Debug.Log 总是返回 LEFT,而它只需要在播放器右侧时才正确。现在它同时显示左右(当在游戏对象的右侧时)。

if (distance <= 249)
        {
            if (enemy.transform.position.x > player.transform.position.x)
            {
                if (waitTime == 0)
                {
                    Debug.Log("LEFT");
                    FireGunsLeft();
                }
            }
            else 
            {
                if (waitTime == 0)
                {
                    Debug.Log("RIGHT");
                    FireGunsRight();
                }
            }

        }

标签: c#unity3drotationposition

解决方案


利用player.transform.InverseTransformPoint(enemy.transform.position)

你可以Transform.InverseTransformPoint从玩家的角度来寻找敌人的相对位置。

Vector3 enemyDirectionLocal = player.transform.InverseTransformPoint(enemy.transform.position);

Vector3 enemyDirectionLocal是一个向量,描述了敌人的位置偏离玩家位置沿玩家的左/右、上/下和前/后轴的位置。

这意味着如果enemyDirectionLocal.x小于零,它在玩家的左侧(尽管可能在前面或后面),如果它大于零,它在右侧。如果为零,则直接在玩家的后面或前面。

Vector3 enemyDirectionLocal = player.transform.InverseTransformPoint(enemy.transform.position);

if (enemyDirectionLocal.x < 0)
{
    if (waitTime == 0)
    {
        Debug.Log("LEFT");
        FireGunsLeft();
    }
}
else if (enemyDirectionLocal.x > 0)
{
    if (waitTime == 0)
    {
        Debug.Log("RIGHT");
        FireGunsRight();
    }
}

推荐阅读