kyuskoj 发表于 2021-12-31 17:44

Unity中,不继承MonoBehaviour的类使用Mono的相关功能

实现一个单例MonoSys,外部调用它。
MonoSys自己维护一个MonoController。
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.SceneManagement;public class MonoController : MonoBehaviour{    public event Action ApplicationPauseEvent;    public event Action ApplicationQuitEvent;    public event Action UpdateEvent;    public event Action<Scene, LoadSceneMode> SceneChangedEvent;    private void OnEnable()    {      SceneManager.sceneLoaded += OnSceneLoaded;    }    private void OnDisable()    {      SceneManager.sceneLoaded -= OnSceneLoaded;    }    private void OnApplicationPause(bool pauseStatus)    {      if (pauseStatus)      {            ApplicationPauseEvent?.Invoke();      }    }    private void OnApplicationQuit()    {      ApplicationQuitEvent?.Invoke();    }    private void Update()    {      UpdateEvent?.Invoke();    }    private void OnSceneLoaded(Scene scene, LoadSceneMode mode)    {      SceneChangedEvent?.Invoke(scene, mode);    }}public class MonoSys{    private static MonoSys _instance;    public static MonoSys Instance    {      get      {            if (_instance == null)            {                _instance = new MonoSys();            }            return _instance;      }    }    private MonoController _monoController;    private MonoSys()    {      var parentGo = GameObject.Find("Singleton");      if (parentGo == null)      {            parentGo = new GameObject("Singleton");            UnityEngine.Object.DontDestroyOnLoad(parentGo);      }      GameObject go = new GameObject(nameof(MonoController));      go.transform.SetParent(parentGo.transform);      _monoController = go.AddComponent<MonoController>();    }    public Coroutine StartCoroutine(IEnumerator routine)    {      return _monoController.StartCoroutine(routine);    }    public void StopCoroutine(IEnumerator routine)    {      _monoController.StopCoroutine(routine);    }    public void AddApplicationQuitEvent(Action action)    {      _monoController.ApplicationQuitEvent += action;    }    public void RemoveApplicationQuitEvent(Action action)    {      _monoController.ApplicationQuitEvent -= action;    }    public void AddApplicationPauseEvent(Action action)    {      _monoController.ApplicationPauseEvent += action;    }    public void RemoveApplicationPauseEvent(Action action)    {      _monoController.ApplicationPauseEvent -= action;    }    public void AddUpdateEvent(Action action)    {      _monoController.UpdateEvent += action;    }    public void RemoveUpdateEvent(Action action)    {      _monoController.UpdateEvent -= action;    }    public void AddSceneChangedEvent(Action<Scene, LoadSceneMode> action)    {      _monoController.SceneChangedEvent += action;    }    public void RemoveSceneChangedEvent(Action<Scene, LoadSceneMode> action)    {      _monoController.SceneChangedEvent -= action;    }}
页: [1]
查看完整版本: Unity中,不继承MonoBehaviour的类使用Mono的相关功能