RemoteSingleton.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using UnityEngine;
  7. using static ScenesManager;
  8. namespace SC.XR.Unity
  9. {
  10. public abstract class RemoteSingleton<T> : MonoBehaviour where T : MonoBehaviour
  11. {
  12. public GameObject[] Prefab;
  13. [HideInInspector]
  14. public List<GameObject> window=new List<GameObject>();
  15. private static T instance;
  16. private static object lockObj = new object();
  17. public static T Instance
  18. {
  19. get
  20. {
  21. return instance;
  22. }
  23. }
  24. public virtual void Awake()
  25. {
  26. instance = (T)FindObjectOfType(typeof(T));
  27. ScenesManager.Instance.initWindow(this.gameObject);
  28. }
  29. public virtual void initShow()
  30. {
  31. if(Prefab!=null&& window.Count<=0)
  32. {
  33. for (int i = 0; i < Prefab.Length; i++)
  34. {
  35. window.Add(GameObject.Instantiate(Prefab[i], this.transform));
  36. window[window.Count - 1].name = Prefab[i].name;
  37. }
  38. }
  39. for (int i = 0; i < window.Count; i++)
  40. {
  41. window[i].SetActive(false);
  42. }
  43. if(window.Count>0)
  44. window[0].SetActive(true);
  45. }
  46. public void gotoWindow(SceneType sc)
  47. {
  48. SceneType stp = (SceneType)System.Enum.Parse(typeof(SceneType), this.name.Split('(')[0]);
  49. int idx = sc - stp- 1000;
  50. Debug.Log("gotoWindow = "+idx);
  51. for (int i = 0; i < window.Count; i++)
  52. {
  53. if(i== idx)
  54. {
  55. window[i].SetActive(true);
  56. }else
  57. {
  58. window[i].SetActive(false);
  59. }
  60. }
  61. }
  62. }
  63. }