這裏用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方法。
到這裏,客戶端的尋路部分就結束了,後面會根據消息類型M2C_PathfindingResult,從服務端入手,學習ET的尋路模塊。