Init.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System;
  2. using CommandLine;
  3. using UnityEditor;
  4. using UnityEngine;
  5. namespace ET
  6. {
  7. public class Init: MonoBehaviour
  8. {
  9. private void Start()
  10. {
  11. this.StartAsync().Coroutine();
  12. }
  13. private async ETTask StartAsync()
  14. {
  15. DontDestroyOnLoad(gameObject);
  16. AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
  17. {
  18. Log.Error(e.ExceptionObject.ToString());
  19. };
  20. // 命令行参数
  21. string[] args = "".Split(" ");
  22. Parser.Default.ParseArguments<Options>(args)
  23. .WithNotParsed(error => throw new Exception($"命令行格式错误! {error}"))
  24. .WithParsed((o)=>World.Instance.AddSingleton(o));
  25. GlobalConfig globalConfig = Resources.Load<GlobalConfig>("GlobalConfig");
  26. Options.Instance.SceneName = globalConfig.SceneName;
  27. World.Instance.AddSingleton<Logger>().Log = new UnityLogger();
  28. ETTask.ExceptionHandler += Log.Error;
  29. World.Instance.AddSingleton<TimeInfo>();
  30. World.Instance.AddSingleton<FiberManager>();
  31. await World.Instance.AddSingleton<ResourcesComponent>().CreatePackageAsync("DefaultPackage", true);
  32. World.Instance.AddSingleton<CodeLoader>().Start().Coroutine();
  33. }
  34. private void Update()
  35. {
  36. TimeInfo.Instance.Update();
  37. FiberManager.Instance.Update();
  38. }
  39. private void LateUpdate()
  40. {
  41. FiberManager.Instance.LateUpdate();
  42. }
  43. private void OnApplicationQuit()
  44. {
  45. World.Instance.Dispose();
  46. }
  47. }
  48. }