Unity帧同步游戏(如:王者荣耀)中的寻路方案

3回答

Unity帧同步游戏(如:王者荣耀)中的寻路方案

提问者 hackself 2018-05-04 2.5k浏览
目前正在使用Unity开发一款RTS游戏,是基于帧同步德邦,在寻路方案选择上有点没想明白,请教一下大家!
因为使用了帧同步,所以客户端代码分了逻辑层和渲染层
寻路是在逻辑层中进行的,这就要求寻路的一致性和稳定性(浮点)。Unity自带的导航网格方案是没法使用了。查了一些资料,发现有一个AStar* PathFinding 插件。
看了下这个插件的代码发现了两个问题:
1.这个插件的代码是和Unity深度耦合的。给用户的接口都是已MonoBehavior的形式提供的。所以必须挂在GameObject上才能使用。但是我逻辑层的代码实现上是和Unity无关的。这样做是为了让逻辑层的代码能在服务器中运行,用于验证对战的结果(PVE防外挂)。这是否意味着,我要修改这个插件的代码,将其核心寻路逻辑和用的到的unity的数据结构(Vector3)从中分离出来,除去对Unity的依赖?
2.这个插件内部是使用多线程异步寻路的,在帧同步的逻辑层应该只能使用同步的寻路方式吧?否则如何做到不同机器各自的怪物的导航时机是在相同逻辑帧中开始的?这是否意味着我要修改这个插件,提供同步接口???但是,使用同步有带来另一个问题。RTS游戏中的单位很多,每个单位都需要单独寻路。如果使用同步寻路是不是会很卡??

不知道《王者荣耀》中的寻路是如何实现的?能不能给个具体的方案?谢谢了!@邓涛
邓涛邓涛

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • 酸辣酸辣 2018-05-04 13:57
    既然插件的a*不符合需求为何不自己写呢?
    帧同步也是可以用多线程来寻路的,只需保证寻路过程不影响公共数据和寻路调用顺序即可
    2评论
  • 包饺子喽 2018-05-04 15:17
    我不知道王者荣耀怎么实现的,但是我们是自己实现了一个A*。A*本身并不算非常复杂的算法,主要在于慢慢的优化,这个要不断的优化尝试,并没有通用的算法。见我们实现的实例:大量骷髅同时行动,手机上没有任何问题 
    7评论
  • viva+la+vida 2018-05-08 16:35
    完全可以用A*Pathfinding。不过需要对部分算法(用了浮点数的部分)进行修改。
    王者荣耀就是基于A*Pathfinding做的寻路(之前老版本解包看的)。
    0评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答