c# - 如何检测游戏对象是在玩家的左侧还是右侧
问题描述
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();
}
}
}
解决方案
利用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();
}
}
推荐阅读
- wpf - 运行 Dev Express Scheduler 表单时 VB WPF 应用程序崩溃
- android - 在 Chromebook 上运行 C 链接的 Android 应用程序时发生随机崩溃 (sigabrt)
- google-chrome-extension - Chrome 扩展 - 从 contentScript 文件打开弹出窗口
- python - 正则表达式变得狂野
- java - JavaFX Undecorated StageStyle 将保持 Windows 任务栏可见
- r - 对于 ggplot2 geom_boxplot,只有 2 个样本时,有没有办法去除盒子和胡须?
- javascript - 移动图像不能超出窗口 DOM
- firebase - Update multiple documents in a single transaction with dart and Firestore
- firebase - 我是否需要明确说明每个 Firestore 集合的读/写验证规则?
- javascript - JS 甜甜圈图,有无序百分比