Browse Source

增加SceneIOCContainer用于用于存储对象、物体

蓝色星空 1 year ago
parent
commit
3ab449afa3

+ 15 - 2
Assets/Prefab/BluePrefabs/BlueRoot.prefab

@@ -219,10 +219,10 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: e0f98af669c5b684ba4aa93942b26994, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
-  ObjOfRefrence: {fileID: 6415550772002403175, guid: 38c74116e9fb2a947ad1b40d7038bf85,
-    type: 3}
+  goRefrence: {fileID: 0}
   meshTest: {fileID: 0}
   meshTestParent: {fileID: 0}
+  MoveChange: {fileID: 0}
 --- !u!1 &3827978887888892621
 GameObject:
   m_ObjectHideFlags: 0
@@ -266,6 +266,7 @@ GameObject:
   - component: {fileID: 6577798671095520273}
   - component: {fileID: 1758718918244431555}
   - component: {fileID: 3641700550515877180}
+  - component: {fileID: 8552741019214790318}
   m_Layer: 0
   m_Name: BlueRoot
   m_TagString: Untagged
@@ -331,6 +332,18 @@ MonoBehaviour:
   m_Script: {fileID: 11500000, guid: 7edfff1461ac83640bd4012b59d97201, type: 3}
   m_Name: 
   m_EditorClassIdentifier: 
+--- !u!114 &8552741019214790318
+MonoBehaviour:
+  m_ObjectHideFlags: 0
+  m_CorrespondingSourceObject: {fileID: 0}
+  m_PrefabInstance: {fileID: 0}
+  m_PrefabAsset: {fileID: 0}
+  m_GameObject: {fileID: 4965398655029255260}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: 11500000, guid: 757e290c9613bc04d82fb42d0291b70c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
 --- !u!1 &5121041051266488258
 GameObject:
   m_ObjectHideFlags: 0

+ 31 - 0
Assets/Scripts/Blue/0.FrameworkDesign/Util/SceneIOCContainer.cs

@@ -0,0 +1,31 @@
+using System.Collections.Generic;
+using Blue;
+
+/// <summary>
+/// 场景IOC容器,用于存储对象、物体
+/// </summary>
+public class SceneIOCContainer : SingletonPatch<SceneIOCContainer>
+{
+    private Dictionary<string, object> objContainer = new Dictionary<string, object>();
+
+    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;
+    }
+}

+ 11 - 0
Assets/Scripts/Blue/0.FrameworkDesign/Util/SceneIOCContainer.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: d3a4e1a316def2e4c9210690d64d91d2
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 2 - 4
Assets/Scripts/Blue/Controller/GetScenePosRot.cs

@@ -3,12 +3,10 @@ using UnityEngine;
 
 public class GetScenePosRot : AbstractController
 {
-    public Transform meshTest;
-    public Transform meshTestParent;
+    public Transform meshTest=>(SceneIOCContainer.Instance.Pull("mesh_test")as GameObject).transform;
+    public Transform meshTestParent=>(SceneIOCContainer.Instance.Pull("ARSpaceForAll")as GameObject).transform;
     private void Awake()
     {
-        meshTestParent = GameObject.Find("ARSpaceForAll").transform;
-        meshTest = GameObject.Find("ARSpaceForAll/mesh_test").gameObject.transform;
         this.SubscribeEvent<GetScenePosRotEvent>(GetScenePosRotSuccess).UnSubScribeWhenGameObjectDestroyed(gameObject);
     }
 

+ 4 - 7
Assets/Scripts/Blue/Controller/LoadReference.cs

@@ -4,13 +4,10 @@ using Blue;
 public class LoadReference : AbstractController
 {
     public GameObject goRefrence;
-    public Transform meshTest;
-    public Transform meshTestParent;
-    public MoveChange MoveChange;
-    private void Awake()
+    private Transform meshTest=>(SceneIOCContainer.Instance.Pull("mesh_test")as GameObject).transform;
+    private Transform meshTestParent=>(SceneIOCContainer.Instance.Pull("ARSpaceForAll")as GameObject).transform;
+    private void Start()
     {
-        meshTestParent = GameObject.Find("ARSpaceForAll").transform;
-        meshTest = GameObject.Find("ARSpaceForAll/mesh_test").gameObject.transform;
         this.SubscribeEvent<GetReferencePosEvent>(GetObjOfRefrencePosRotSuccess).UnSubScribeWhenGameObjectDestroyed(gameObject);
     }
 
@@ -25,7 +22,7 @@ public class LoadReference : AbstractController
     {
         goRefrence = Instantiate(goRefrence,meshTest);
         goRefrence.name = "goRefrence";
-        MoveChange.go = goRefrence;
+        SceneIOCContainer.Instance.Push("goRefrence",goRefrence);
         goRefrence.transform.localPosition = pos;
         goRefrence.transform.parent = meshTestParent;
         goRefrence.SetActive(false);

+ 25 - 0
Assets/Scripts/Blue/System/GetObjectSystem.cs

@@ -0,0 +1,25 @@
+using Blue;
+using UnityEngine;
+
+public class GetObjectSystem : SingletonMonobehaviour<GetObjectSystem>
+{
+    [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("ARSpaceForAll");
+    }
+
+    private void PushIOC()
+    {
+        SceneIOCContainer.Instance.Push("mesh_test",mesh_test);
+        SceneIOCContainer.Instance.Push("ARSpaceForAll",ARSpaceForAll);
+    }
+}

+ 11 - 0
Assets/Scripts/Blue/System/GetObjectSystem.cs.meta

@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: 757e290c9613bc04d82fb42d0291b70c
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 

+ 19 - 20
Assets/Scripts/Blue/Temp/MoveChange.cs

@@ -4,17 +4,13 @@ using UnityEngine.UI;
 
 public class MoveChange : MonoBehaviour
 {
-    [SerializeField] private GameObject moveGame;
-    [SerializeField] private Transform parent;
+    private GameObject mesh_test => SceneIOCContainer.Instance.Pull("mesh_test") as GameObject;
+    private Transform ARSpaceForAll=>(SceneIOCContainer.Instance.Pull("ARSpaceForAll")as GameObject).transform;
     [SerializeField] private Toggle RotToggle;
     private bool isDown;
-    private float y;
+    private float y=> mesh_test.transform.position.y;
     void Start()
     {
-        moveGame = GameObject.Find("ARSpaceForAll/mesh_test");
-        parent = GameObject.Find("ARSpaceForAll").transform;
-        y = moveGame.transform.position.y;
-
         DispatcherBase.KeyDownDelegateRegister(keyDownEventDelegate);
         DispatcherBase.KeyUpDelegateRegister(keyUpEventDelegate);
         RotToggle.onValueChanged.AddListener(RotToggleOnValueChanged);
@@ -22,13 +18,13 @@ public class MoveChange : MonoBehaviour
     }
     private void keyUpEventDelegate(InputKeyCode keyCode, InputDevicePartBase part)
     {
-        if (keyCode != InputKeyCode.Enter || go==null)
+        if (keyCode != InputKeyCode.Enter || goRefrence==null)
         {
             return;
         }
         Debug.Log("keyDownEventDelegate===>" + keyCode);
-        moveGame.transform.parent = parent;
-        go.transform.parent = parent;
+        mesh_test.transform.parent = ARSpaceForAll;
+        goRefrence.transform.parent = ARSpaceForAll;
         isDown = false;
     }
 
@@ -38,17 +34,17 @@ public class MoveChange : MonoBehaviour
         {
             return;
         }
-        if (!SetSceneActive.Instance.active|| go==null)
+        if (!SetSceneActive.Instance.active|| goRefrence==null)
             return;
         if(!IsRot)
         {
-            TempVector3 = OpenXRCamera.Instance.head.position-go.transform.position;
-            moveGame.transform.parent = go.transform;
+            TempVector3 = OpenXRCamera.Instance.head.position-goRefrence.transform.position;
+            mesh_test.transform.parent = goRefrence.transform;
         }
         else
         {
-            TempVector3 = OpenXRCamera.Instance.head.eulerAngles-go.transform.eulerAngles;
-            moveGame.transform.parent = go.transform;
+            TempVector3 = OpenXRCamera.Instance.head.eulerAngles-goRefrence.transform.eulerAngles;
+            mesh_test.transform.parent = goRefrence.transform;
         }
 
 /*
@@ -85,13 +81,13 @@ public class MoveChange : MonoBehaviour
         {
             if(!IsRot)
             {
-                go.transform.position = OpenXRCamera.Instance.head.position - TempVector3;
-                go.transform.position = new Vector3(go.transform.position.x, y, go.transform.position.z);
+                goRefrence.transform.position = OpenXRCamera.Instance.head.position - TempVector3;
+                goRefrence.transform.position = new Vector3(goRefrence.transform.position.x, y, goRefrence.transform.position.z);
             }
             else
             {
-                go.transform.eulerAngles = OpenXRCamera.Instance.head.eulerAngles - TempVector3;
-                go.transform.eulerAngles = new Vector3(0, go.transform.eulerAngles.y, 0);
+                goRefrence.transform.eulerAngles = OpenXRCamera.Instance.head.eulerAngles - TempVector3;
+                goRefrence.transform.eulerAngles = new Vector3(0, goRefrence.transform.eulerAngles.y, 0);
             }
             //moveGame.transform.eulerAngles = new Vector3(0, moveGame.transform.eulerAngles.y, 0);
         }
@@ -100,7 +96,10 @@ public class MoveChange : MonoBehaviour
     private bool IsRot;
     private Vector3 TempVector3;
     private Vector3 headPos;
-    public GameObject go; // 参照物
+    public GameObject goRefrence // 参照物
+    {
+        get =>SceneIOCContainer.Instance.Pull("goRefrence")as GameObject;
+    }
     private void RotToggleOnValueChanged(bool isOn)
     {
         if (isOn)