プロセスの開始
UGFのカプセル化:ProcedureComponent
処理コンポーネントの機能は、登録処理、初期化処理、起動処理、取得処理時間など比較的単純明快です。
次のコードは、
起動中のプロセス マネージャーを作成します。
public override void Awake()
{
base.Awake();
m_ProcedureManager = GameFrameworkEntry.GetModule<IProcedureManager>();
if (m_ProcedureManager == null)
{
Log.Fatal("Procedure manager is invalid.");
return;
}
}
Start、 1、81行、Activator.CreateInstanceでモニターパネル
2、97行で選択したプロセスのインスタンスを作成、プロセスプロセスマネージャーの初期化メソッドを呼び出し、OnInit(ProcedureOwnerprocedureOwner)を実行することで主に3つが完了します。プロセスメソッドの。
3. 99 行目、開始プロセス。ゲームを開始するときに最初に入るプロセスです。
2 つ目については、若干の曖昧な点があるかもしれませんが、出力されたログのトレーサビリティから、プロセスの初期化は最終的に有限状態マシンに渡されて完了することがわかります。ログからソースを追跡し、下を見てください。
GF パッケージ:
ProcedureManager (IProcedureManager): プロセス マネージャーで定義される関数は、基本的にプロセスの関数と同じです。
ProcedureComponent の 97 行目は、プロセス マネージャーの初期化メソッドを呼び出します。プロセス マネージャーでの呼び出しは、ステート マシン CreateFsm を作成することです。
ステート マシンでの状態の作成は Fsm に渡されて完了し、
Fsm の作成直後に OnInit メソッドが呼び出されて各プロセスが初期化されます。
ProcedureBase: プロセス基本クラス、抽象クラス。プロセスの初期化、開始、ポーリング、終了、および破棄のライフサイクル メソッドを定義します。プロセス基本クラス自体は、有限状態マシン状態基本クラスを継承します。
戻って、ChangeState(procedureOwner); を使用した、モジュール使用時の切り替えプロセスを見てみましょう。ChangeState メソッドは、有限状態マシン FsmState から派生します。
コードを分析すると、プロセスの本質は実際にはステート マシンであることがわかります。プロセスの作成はステート マシンの作成であり、プロセスはステート マシンをカプセル化した層です。
ステート マシンのトレーサビリティ
UGF パッケージ: (スクリプト関数のリスト)
FsmComponent 有限状態マシン コンポーネントを作成、破棄し、存在するかどうかを判断します。
GF パッケージ: (スクリプト関数のリスト)
IFsm: インターフェイス関数、有限状態マシンの取得 (名前、ホルダー、状態の数、正常に実行されているかどうか、期間、現在の状態、すべての状態、データ (設定、削除、取得))、有限状態マシン状態があるかどうかに関係なく、有限状態マシンを開始します。
ステート マシン関数FsmBase: 基本クラス関数、ホルダー タイプの初期化、破棄、ポーリングの実装に焦点を当てます。ステート マシン プロセス
FsmState に注目してください。これは、プロセス ライフ サイクルの仮想メソッドを定義するステート基本クラスであり、プロセス基本クラスはステート マシン状態基本クラスを継承します。
Fsm : FsmBase、IReference、IFsm は有限状態マシンを作成し、適切なタイミングで有限状態マシン状態基本クラス FsmState のライフ サイクル メソッドを呼び出します。
FsmManager: ステート マシンの作成、取得、および破棄を管理します。
ステート マシンがポーリング開始呼び出しを完了する方法を見て、ステート マシンとプロセスの関係をより深く理解しましょう。
ポーリングの開始
と終了 ポーリングの開始者: BaseComponent コンポーネントの Update メソッド。
継承関係:BaseComponent:GameFrameworkComponent:MonoBehaviour
BaseComponent:ポーリングの開始
private void Update()
{
GameFrameworkEntry.Update(Time.deltaTime, Time.unscaledDeltaTime);
}
GameFrameworkEntry: すべてのモジュールをポーリングします
public static void Update(float elapseSeconds, float realElapseSeconds)
{
foreach (GameFrameworkModule module in s_GameFrameworkModules)
{
module.Update(elapseSeconds, realElapseSeconds);
}
}
FsmManager: 有限ステート マシン マネージャー (モジュールの 1 つ、ステート マシン モジュール)
m_Fsms のプロセス クラスは、ProduceManager プロセス マネージャーの初期化メソッド Initialize で作成されます。foreach プロセスのポーリングにより、プロセスが破棄されるかどうかが判断され、破棄は現在のプロセスの更新のみを実行します。
internal override void Update(float elapseSeconds, float realElapseSeconds)
{
m_TempFsms.Clear();
if (m_Fsms.Count <= 0)
{
return;
}
foreach (KeyValuePair<TypeNamePair, FsmBase> fsm in m_Fsms)
{
m_TempFsms.Add(fsm.Value);
}
foreach (FsmBase fsm in m_TempFsms)
{
if (fsm.IsDestroyed)
{
continue;
}
fsm.Update(elapseSeconds, realElapseSeconds);
}
}
Fsm: 有限状態マシンは現在の状態マシン Update を呼び出します。
internal override void Update(float elapseSeconds, float realElapseSeconds)
{
if (m_CurrentState == null)
{
return;
}
m_CurrentStateTime += elapseSeconds;
m_CurrentState.OnUpdate(this, elapseSeconds, realElapseSeconds);
}
ProcedureBase : FsmState: ポーリングのエンドポイント (プロセス クラスによって継承)
public virtual void OnUpdate(IFsm<T> fsm, float elapseSeconds, float realElapseSeconds)
{
}