using System; using Cysharp.Threading.Tasks; using UnityEngine; namespace Unity.Startup.Procedure { public enum UpdateProcedureState : byte { ProcedureEntryState, ProcedureGetAppVersionInfoState, ProcedureInitPackageState, ProcedureDownloadBundleState, ProcedurePatchDoneState, ProcedureLoadAssembly, ProcedureUpdateFinishState } public class Procedure : MonoBehaviour { private SimpleFSM _fsm; private async UniTaskVoid Start() { await UniTask.WaitUntil(() => YooAsset.YooAssets.Initialized); _fsm = new SimpleFSM(); _fsm.Register(UpdateProcedureState.ProcedureEntryState); _fsm.Register(UpdateProcedureState.ProcedureGetAppVersionInfoState); _fsm.Register(UpdateProcedureState.ProcedureInitPackageState); _fsm.Register(UpdateProcedureState.ProcedureDownloadBundleState); _fsm.Register(UpdateProcedureState.ProcedurePatchDoneState); _fsm.Register(UpdateProcedureState.ProcedureLoadAssembly); _fsm.Register(UpdateProcedureState.ProcedureUpdateFinishState); _fsm.SwitchState(UpdateProcedureState.ProcedureEntryState); } private void Update() { _fsm.Update(Time.deltaTime); } private void OnDestroy() { _fsm.Dispose(); _fsm = null; } } }