【发布时间】:2019-08-25 02:18:02
【问题描述】:
我编写了这段代码,用于在我们的角色前面创建一个平面,然后我们会使用它 检查敌人的位置并知道他们是否在飞机内。
代码是 Java 并且在我们的服务器上运行,我们在使用 Unity 的游戏中使用它。
在下面的代码中,AreaWidth 是我们要检查的平面的宽度,Area length 是它的长度。 Message 包含有关我们玩家的数据,例如位置和四元数。 bwNode 保存着我们正在检查的当前目标的数据。
float AreaWidth = message.getWidth();
float AreaLength = message.getLength();
double Fi, cs, sn;
Fi = message.quaternion.toEulerAngles().getY();
cs = Math.cos(Fi);
sn = Math.sin(Fi);
int ptx, pty;
ptx = (int)(bwNode.getLoc().getX() - message.loc.getX());
pty = (int)(bwNode.getLoc().getZ() - message.loc.getZ());
double perplen, alonglen;
perplen = Math.abs(ptx * sn - pty * cs);
alonglen = ptx * cs + pty * sn;
if (perplen <= AreaWidth / 2)
{
if (alonglen >= 0 && alonglen <= AreaLength)
{
//the target is inside the area
}
}
因此,当在游戏中调试或实际使用此代码时,它仅适用于 1 个问题,飞机始终面向玩家的右侧或左侧,而不是始终面向前方/玩家面向的方向。
这是在我们的玩家 Y 旋转上以 0、90、180 和 270 度表示它的图像。 (在这张图片中,白色立方体是玩家,三角形表示玩家面对的位置,球体是敌人,红色透明框表示我们的飞机应该在哪里,彩色线条形成实际创建的飞机。)
我需要帮助找出是什么导致了我的代码。
【问题讨论】: