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();
}
}
}
答案 0 :(得分:1)
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();
}
}
答案 1 :(得分:0)
另一种方法是找到玩家位置和敌人位置var directionToEnemy = enemy.transform.position - player.transform.position
之间的向量,然后找到它在玩家变换的right
向量上的投影,当敌人是在播放器右侧:
var directionToEnemy = enemy.transform.position - player.transform.position;
var projectionOnRight = Vector3.Dot(directionToEnemy, player.transform.right);
if (projectionOnRight < 0)
{
if (waitTime == 0)
{
Debug.Log("LEFT");
FireGunsLeft();
}
}
else if (projectionOnRight > 0)
{
if (waitTime == 0)
{
Debug.Log("RIGHT");
FireGunsRight();
}
}
您还可以考虑在进行相对位置的计算之前先进行waitTime == 0
检查。
如果Mathf.Approximately(projectionOnRight, 0f)
返回true,那么敌人就在玩家的面前,您可能想要执行FireGunsStraight()
或在这种情况下执行的所有操作。