Init.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. using System;
  2. using System.Threading;
  3. using CommandLine;
  4. using UnityEngine;
  5. namespace ET
  6. {
  7. public class Init: MonoBehaviour
  8. {
  9. private readonly ThreadSynchronizationContext threadSynchronizationContext = new();
  10. private void Start()
  11. {
  12. DontDestroyOnLoad(gameObject);
  13. SynchronizationContext.SetSynchronizationContext(threadSynchronizationContext);
  14. AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
  15. {
  16. Log.Error(e.ExceptionObject.ToString());
  17. };
  18. // 命令行参数
  19. string[] args = "".Split(" ");
  20. Parser.Default.ParseArguments<Options>(args)
  21. .WithNotParsed(error => throw new Exception($"命令行格式错误! {error}"))
  22. .WithParsed(World.Instance.AddSingleton);
  23. Options.Instance.StartConfig = $"StartConfig/Localhost";
  24. World.Instance.AddSingleton<Logger>().ILog = new UnityLogger();
  25. ETTask.ExceptionHandler += Log.Error;
  26. World.Instance.AddSingleton<CodeLoader>().Start();
  27. }
  28. private void Update()
  29. {
  30. threadSynchronizationContext.Update();
  31. FiberManager.Instance.Update();
  32. }
  33. private void LateUpdate()
  34. {
  35. threadSynchronizationContext.Update();
  36. FiberManager.Instance.LateUpdate();
  37. }
  38. private void OnApplicationQuit()
  39. {
  40. World.Instance.Dispose();
  41. }
  42. }
  43. }