Java 如何解决此90或-90旋转问题

Java 如何解决此90或-90旋转问题,java,c#,unity3d,Java,C#,Unity3d,我写了这段代码,用于在角色前面创建一个平面,然后使用它 检查敌人的位置,知道他们是否在飞机内 代码是用Java编写的,在我们的服务器上运行,我们使用Unity在游戏中使用它 在下面的代码中,AreaWidth是我们要检查的平面的宽度,Area length是其长度。 消息是保存有关我们的球员的数据,如位置和四元数。 bwNode保存着我们正在检查的当前目标的数据 float AreaWidth=message.getWidth(); float AreaLength=message.getLen

我写了这段代码,用于在角色前面创建一个平面,然后使用它 检查敌人的位置,知道他们是否在飞机内

代码是用Java编写的,在我们的服务器上运行,我们使用Unity在游戏中使用它

在下面的代码中,AreaWidth是我们要检查的平面的宽度,Area length是其长度。 消息是保存有关我们的球员的数据,如位置和四元数。 bwNode保存着我们正在检查的当前目标的数据

float AreaWidth=message.getWidth();
float AreaLength=message.getLength();
双Fi、cs、sn;
Fi=message.quaternion.toEulerAngles().getY();
cs=Math.cos(Fi);
sn=数学sin(Fi);
int ptx,pty;
ptx=(int)(bwNode.getLoc().getX()-message.loc.getX());
pty=(int)(bwNode.getLoc().getZ()-message.loc.getZ());
双珀伦,阿隆根;
perplen=数学绝对值(ptx*sn-pty*cs);
alonglen=ptx*cs+pty*sn;

如果(perplen=0&&alonglen那么就我所知,这不是一个关于统一的问题,因为它只与后端相关

无论如何,你真的混淆了目标位置和玩家位置的术语,注意在你的屏幕上,飞机将始终面对目标,无论玩家看起来在哪里

我会这样做,在玩家的坐标系中表达目标,类似这样:

float AreaWidth = message.getWidth();
float AreaLength = message.getLength();

Fi = message.quaternion.toEulerAngles().getY();
cs = Math.cos(Fi);
sn = Math.sin(Fi);

// First, move the target from word axis origin to player axis origin
float tx = (bwNode.getLoc().getX() - message.loc.getX());
float tz = (bwNode.getLoc().getZ() - message.loc.getZ());

// Now rotate the target around it new word origin to apply player rotation
float ptx = cs * tx - sn * tz;
float ptz = sn * tx + cs * tz;

// Now ptx and ptz are in new word coordinates, simply test them agains area
if (-AreaWidth / 2 <= ptx && ptx <= AreaWidth / 2 && AreaLength => 0 && AreaLength <= l) {
    // It is inside
} else {
    // It is outside
}
float AreaWidth=message.getWidth();
float AreaLength=message.getLength();
Fi=message.quaternion.toEulerAngles().getY();
cs=Math.cos(Fi);
sn=数学sin(Fi);
//首先,将目标从单词轴原点移动到玩家轴原点
float tx=(bwNode.getLoc().getX()-message.loc.getX());
float tz=(bwNode.getLoc().getZ()-message.loc.getZ());
//现在将目标旋转到新单词原点周围,以应用玩家旋转
浮动ptx=cs*tx-sn*tz;
浮动ptz=sn*tx+cs*tz;
//现在ptx和ptz处于新的单词坐标中,只需在新的区域重新测试它们

如果(-AreaWidth/2首先感谢您的回答!我刚刚测试了它,现在它在播放机前工作,但新的问题正在发生。这里有一个视频显示:我认为我们计算ptx和ptz的方式有问题。正如您所看到的球体(敌人)仅在播放器的右侧被视为内部,当目标X位置大于宽度/2时,正确地被视为外部。但在播放器的左侧,它始终被视为外部。我调试了未满足的条件,它恰好是第二个条件,检查ptz。出于某种原因,ptx和ptz与您相同可以在视频中看到,这会导致左侧问题。此外,无论目标距离播放器有多远,如果在左侧,它都会被视为在播放器内部,但不会检查实际长度。在本测试中,宽度为6,长度为15。这是Unity中使用的代码,以便我可以直观地进行调试。请注意,我修改了您最初对ptz的检查还有长度,因为我们想确保我们在长度范围内,而不是更远。哦,傻我,我弄乱了ptz公式,它应该是
ptz=sn*tx+cs*tz
not
ptz=sn*tz+cs*tx
,现在应该可以了。非常感谢你。你在这里真的帮了我的忙。现在它工作得很好。给我发一封电子邮件到bringitongame@gmail.com如果我有办法奖励你