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()方法應該是尋路的核心方法之一。

汗。。。。。並沒有找到什麼實質性的關於尋路的代碼。。。

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