# 1、SceneIOCContainer 在项目中很多游戏对象不止会被一个脚本使用,可能脚本1、2、3...都会使用到同一object【组件、物体、对象】,将需要被多出引用的object存储到IOC容器,使用时从容器中拿 ## **SceneIOCContainer代码** ```csharp using System.Collections.Generic; using Blue; /// /// 场景IOC容器,用于存储对象、物体 /// public class SceneIOCContainer : Singleton { private Dictionary objContainer = new Dictionary(); public void Push(string objName,object obj) { if(objContainer.ContainsKey(objName)) { objContainer[objName] = obj; } else { objContainer.Add(objName,obj); } } public object Pull(string objName) { if(objContainer.ContainsKey(objName)) { return objContainer[objName]; } return null; } } ``` ## **GetObjectSystem示例** **代码** ```csharp // 创建GetObjectSystem using UnityEngine; public class GetObjectSystem : SingletonMonobehaviour { [SerializeField] private GameObject mesh_test; [SerializeField] private GameObject ARSpaceForAll; private void Awake() { GetObj(); PushIOC(); } private void GetObj() { mesh_test = GameObject.Find("ARSpaceForAll/mesh_test"); ARSpaceForAll = GameObject.Find("goRefrence"); } private void PushIOC() { SceneIOCContainer.Instance.Push("mesh_test",mesh_test); SceneIOCContainer.Instance.Push("goRefrence",ARSpaceForAll); } } ``` ## **调用** **示例 代码** ```csharp // 使用 using UnityEngine; using UnityEngine.UI; public class MoveChange : MonoBehaviour { private GameObject test => SceneIOCContainer.Instance.Pull("test") as GameObject; public GameObject goRefrence // 参照物 { get =>SceneIOCContainer.Instance.Pull("goRefrence")as GameObject; } } ``` # **2、CommandSystem** 在其他人写的脚本中调用Command,由于对方并没有执行框架规则,所以通过CommandSystem执行命令 ## **代码** ```csharp namespace Blue { public class CommandSystem : SingletonMonobehaviour { /// /// 发送命令 /// public void Send(ICommand command) { this.SendCommand(command); } } } ``` ## 调用 ```csharp // 其他人代码 public class Other: MonoBehaviour { public void Test() { TestCommand Command = new TestCommand(); CommandSystem.Instance.Send(Command); } } ``` # **3、CoroutineSystem** 在普通的C#类执行协程 ## **代码** ```csharp using System.Collections; using UnityEngine; using Blue; public class CoroutineSystem : SingletonMonobehaviour { /// /// 启动一个协程 /// public Coroutine Start_Coroutine(IEnumerator coroutine) { return StartCoroutine(coroutine); } /// /// 停止一个协程序 /// public void Stop_Coroutine(Coroutine routine) { StopCoroutine(routine); } } ``` ## 调用 ```csharp public class PointService { public void GetRefrencePos(int sceneID) { CoroutineSystem.Instance.Start_Coroutine(GetRefrence(sceneID)); } private IEnumerator GetRefrence(int sceneID) { yield return null; } } ``` # **4、BlueObject** 将一些 ## **代码** ```csharp using UnityEngine; [CreateAssetMenu(fileName ="PrefabsAsset",menuName ="ScriptableObject/BluePrefabs",order = 1 )] public class BlueObject : ScriptableObject { //可以包含更多的数据,信息 public GameObject WarningPopUp; public string NetErrorText; public string SuccessText; } ``` ## 调用 ```csharp public class PointService { public void GetRefrencePos(int sceneID) { CoroutineSystem.Instance.Start_Coroutine(GetRefrence(sceneID)); } private IEnumerator GetRefrence(int sceneID) { yield return null; } } ```