ET服务端框架学习——寻路demo

        这里用master版本的寻路来学习一下ET的服务端,ET的寻路部分是放在服务端计算的,然后将路径的点集发送到客户端,有客户端具体执行移动命令。

       在此之前,先来看看ET客户端的关于寻路部分的demo。

  • UnitPathComponent组件

      该组件是执行寻路移动的核心组件之一。 该组件没有接通事件系统。StartMove(M2C_PathfindingResult message)方法会从message消息中获取到移动路径点集和一个ServerPos变量(寻路移动的起点)。然后调用StartMove(CancellationToken cancellationToken)方法,该方法会根据ServerPos和客户端角色的移动起始位置进行移动速度矫正,该矫正速度仅用于移动到第一个位点。在移动的过程中,调用TurnComponent组件的Turn方法用于转弯,MoveComponent组件的MoveToAsync方法用于实施移动。

  • TurnComponent组件

     该组件用于转向,接通了Update事件, 在Update方法中,利用Quaternion.Slerp方法对方向进行调整

  • MoveComponent组件

   该组件也接通了Update事件。 在Update方法中,利用Vector3.Lerp方法对位置进行调整。

   UnitPathComponent组件的是通过事件系统调用的,如图所示:

如图所示:

对于该事件的具体讲解可以参考文章《ET框架学习——OpcodeTypeComponent组件和MessageDispatherComponent组件》。可以看到,该类继承了AMHandler抽象类,进而实现了IMHandler接口。MessageDispatcherComponent组件会收集持有MessageHandler特性的类,然后按照泛型Message(消息的类型)的类型进行分类存放。最后在收到相应的消息的时候,就可以通过消息类型追溯到指定的类,执行Run方法。

       到这里,客户端的寻路部分就结束了。

       服务端的寻路组件是PathfindingComponent

  • PathfindingComponent组件

        PathfindingComponent组件接通了Awake事件,在Awake方法中做了一些初始化的操作,包括读取配置,读取地图等操作。

等操作。

AStarConfig组件用于保存一些寻路配置相关的数据。地图数据解析完成后也是存放在AStarConfig组件中的。解析地图使用的是A*插件自带的解析器AstarSerializer,读取数据后会返回NavGraph数据,该数组用于保存地图数据。组件内部有一个Search方法,应该是搜索附近节点的办法。

public bool Search(ABPathWrap path)
{
    this.PathProcessor.queue.Push(path.Path);
    while (this.PathProcessor.CalculatePaths().MoveNext())
    {
        if (path.Path.CompleteState != PathCompleteState.NotCalculated)
        {
            break;
        }
    }

    if (path.Path.CompleteState != PathCompleteState.Complete)
    {
        return false;
    }
            
    PathModifyHelper.StartEndModify(path.Path);
    PathModifyHelper.FunnelModify(path.Path);

    return true;
}

参数ABPathWrap组件用于保存寻路路径。ABPath.Construct方法接受起止点两个参数,创建一个ABPath对象,并设置路径的起

寻路路径。

止点。CalculatePaths()方法应该是寻路的核心方法之一。

汗。。。。。并没有找到什么实质性的关于寻路的代码。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章