我如何知道我的敌人是否可以看到我的玩家?


15

给定一个玩家和一个敌人的位置,并给定每个角色的方向向量,我如何确定一个人是否可以“看见”另一个人?

换句话说,如何测试某个方向的位置在另一个方向的前面还是后面?

出于我的目的,“在...前面”是指直接在任何一个角度之前或与之成90度。


11
显然,解决方案是创建另一台摄像机并从敌人的角度重新渲染场景,然后对玩家角色的结果执行图像识别。
2014年

最简单的答案奖授予...
OganM 2014年

3
尽管Riking的评论可能只是在开玩笑,但这实际上是一个公平的做法-为NPC提供与玩家相同的游戏状态访问权限,而不是允许他们访问游戏的内部状态。
R .. GitHub停止帮助ICE,2014年

5
@R ..是的,但是您在哪里画线?将此逻辑推向逻辑终点,NPC最终变得有能力像人类一样玩耍和思考……在这一点上,他们很可能会理性地决定再次开始进行黑客攻击:p
Thomas

@Thomas:在实践中,我认为您可以做出某种折衷,近似于他们作为一名球员所拥有的信息水平,而不必担心会以这种方式实施。诸如对视线进行正确测试,限制识别超出一定距离的物体的能力等简单措施可能会走很长一段路。
R .. GitHub停止帮助ICE

Answers:


17

两个向量的点积可以告诉您它们是否彼此面对。第一个矢量可能是敌人的视线方向,第二个矢量应该是从玩家位置指向敌人位置的矢量。

https://www.youtube.com/watch?v=Q9FZllr6-wY


是的,我想得太多了。我当时在玩4个向量,但实际上我希望从一个玩家到另一个玩家。该视频非常有帮助,谢谢。
izb 2014年

我认为应该在此答案中添加一个至关重要的细节,即游戏还应该进行光线投射或其他操作,以确保他们实际上可以看到玩家(不受墙壁等的阻挡)
T. Kiley 2014年

1
@ T.Kiley:实际上,这是Riking在对该问题的评论中提出的。不,我不认为这是个玩笑。如果您的游戏是3D,光线投射实际上是一种公平的方法。从敌人的角度来看,只需用黑色纹理的所有对象重新渲染场景,除了玩家和其他重要对象应该以其他颜色渲染即可。确保禁用照明和阴影。如果生成的缓冲区不是完全是黑色的,那么您就知道有人在敌人的视线范围内,并且可以使用颜色来识别他们是什么对象。
Lie Ryan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.