我有一个多人游戏,并且正在做客户端预测,但是有些玩家可以喝一剂药,然后变得看不见...
问题在于,当他们变得不可见时,我不会分享客户可以用来知道他在那里的任何东西,因此,当玩家尝试进入一个不可见的玩家所占据的区域时,他会预测自己成功了,然后得到了服务器发送的丑陋位置校正。
一种解决方案是共享某些内容,以便客户端知道,但是黑客可以使用它来找出隐形玩家所在的位置,并作弊。
顺便说一句,我已经解决了常规运动预测问题,它的工作原理非常完美。
我有一个多人游戏,并且正在做客户端预测,但是有些玩家可以喝一剂药,然后变得看不见...
问题在于,当他们变得不可见时,我不会分享客户可以用来知道他在那里的任何东西,因此,当玩家尝试进入一个不可见的玩家所占据的区域时,他会预测自己成功了,然后得到了服务器发送的丑陋位置校正。
一种解决方案是共享某些内容,以便客户端知道,但是黑客可以使用它来找出隐形玩家所在的位置,并作弊。
顺便说一句,我已经解决了常规运动预测问题,它的工作原理非常完美。
Answers:
这可以被认为是动画问题。如果由于尝试移入不可见对象而从服务器返回了位置校正,则不仅要发送该校正,还要发送一个指示为什么需要该校正的标志。他可能会执行“ woah”式的向后倒转动画,而不是让玩家向后弹出,这看起来更像是他刚遇到某件事。
在使用这种方法的游戏中,从遇到的任何事物中(至少是暂时地)消除隐身现象并不少见。除其他外,这激励了隐形玩家避免拥挤或与其他角色过于接近,从而减少了与隐形玩家发生碰撞的频率。因此,即使您发生这种碰撞的动画很弱(或根本不存在),不可见的角色也会在某种程度上隐藏起来,这些隐性角色会进入可见性并向所有人清楚地传达发生的一切。
可以通过不让隐身在近距离工作来消除动画需求。这为隐形玩家提供了更多的激励,以避免他们接近其他角色。这是基于隐身的游戏和AI(将“不可见”替换为“对目标不可见”)的常用方法,可以在《战车世界》等PvP游戏中看到。如果看不见的物体离您足够近,以至于无法与之碰撞(在延迟限制之内),则无需担心与隐含字符的碰撞响应。
Dracor的解决方案只是忽略与不可见对象的碰撞也是一种很好的解决方案。这再次需要一些动画(对于不可见的玩家的客户端),因此对象不只是剪辑玩家屏幕上的化身。如果没有其他原因,您可能会导致可见对象始终推动不可见对象,因此,如果有人与不可见播放器发生碰撞,则不可见播放器会自动从服务器上移开。
不可见-不可见的碰撞有点棘手。仅禁用它们之间的冲突可能是有利的,因为没有人可以看到两个不可见的对象是否剪辑在一起(假设“不可见”,这意味着两个对象对同一客户端不可见)。如果其中一个对象变为可见,它会自动恢复为可见-不可见的碰撞响应(推开不可见的对象)。
如果隐身性复杂,哪些人可以看到谁,那么这一切都会变得棘手。如果需要,上面的第一个或第二个解决方案可能是最好的选择。并非像这样的每个问题都需要技术解决方案。许多人只需要设计解决方案(例如,不允许设计人员使用此功能)。
如果您不想告诉客户隐形玩家在哪里,我真的只会在这里看到两个选项:1)您忽略隐形玩家的单位冲突-一种简单的解决方案,玩家将无法通过以下方式找到隐形玩家碰撞测试。2)确定预测路径后,向服务器发送预测路径并在服务器端更正路径本身,然后将新路径发送回去。
除非我误会了什么,否则解决方案很简单。不要向所有看不见的玩家发送客户信息,仅发送那些在预期间隔内他们可能会在运动范围内发生碰撞的范围内的玩家信息。换句话说,如果客户端仅需预测未来200毫秒,则仅发送有关max_player_velocity units/sec * 1/5 sec
单位外隐身玩家的信息。