Init.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using System;
  2. using CommandLine;
  3. using UnityEngine;
  4. namespace ET
  5. {
  6. public class Init: MonoBehaviour
  7. {
  8. private void Start()
  9. {
  10. DontDestroyOnLoad(gameObject);
  11. AppDomain.CurrentDomain.UnhandledException += (sender, e) =>
  12. {
  13. Log.Error(e.ExceptionObject.ToString());
  14. };
  15. // 命令行参数
  16. string[] args = "".Split(" ");
  17. Parser.Default.ParseArguments<Options>(args)
  18. .WithNotParsed(error => throw new Exception($"命令行格式错误! {error}"))
  19. .WithParsed(World.Instance.AddSingleton);
  20. Options.Instance.StartConfig = $"StartConfig/Localhost";
  21. World.Instance.AddSingleton<Logger>().ILog = new UnityLogger();
  22. ETTask.ExceptionHandler += Log.Error;
  23. World.Instance.AddSingleton<OpcodeType>();
  24. World.Instance.AddSingleton<IdValueGenerater>();
  25. World.Instance.AddSingleton<ObjectPool>();
  26. World.Instance.AddSingleton<WorldActor>();
  27. World.Instance.AddSingleton<CodeLoader>();
  28. World.Instance.AddSingleton<VProcessManager>();
  29. VProcessManager.MainThreadScheduler mainThreadScheduler = World.Instance.AddSingleton<VProcessManager.MainThreadScheduler>();
  30. int vProcessId = VProcessManager.Instance.Create();
  31. mainThreadScheduler.Add(vProcessId);
  32. // 发送消息
  33. WorldActor.Instance.Send(new ActorId(Options.Instance.Process, vProcessId, 0), null);
  34. }
  35. private void Update()
  36. {
  37. VProcessManager.MainThreadScheduler.Instance.Update();
  38. }
  39. private void LateUpdate()
  40. {
  41. VProcessManager.MainThreadScheduler.Instance.LateUpdate();
  42. }
  43. private void OnApplicationQuit()
  44. {
  45. World.Instance.Dispose();
  46. }
  47. }
  48. }