EnvironmentManager.cs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using UnityEngine;
  2. namespace COM3D2.MeidoPhotoStudio.Plugin
  3. {
  4. public class EnvironmentManager
  5. {
  6. public PropManager PropManager { get; private set; }
  7. public LightManager LightManager { get; private set; }
  8. public EffectManager EffectManager { get; private set; }
  9. private GameObject cameraObject;
  10. private Camera subCamera;
  11. private GameObject bgObject;
  12. private Transform bg;
  13. private CameraInfo cameraInfo;
  14. public EnvironmentManager(PropManager propManager, LightManager lightManager, EffectManager effectManager)
  15. {
  16. this.PropManager = propManager;
  17. this.LightManager = lightManager;
  18. this.EffectManager = effectManager;
  19. }
  20. public void Initialize()
  21. {
  22. bgObject = GameObject.Find("__GameMain__/BG");
  23. bg = bgObject.transform;
  24. cameraObject = new GameObject("subCamera");
  25. subCamera = cameraObject.AddComponent<Camera>();
  26. subCamera.CopyFrom(Camera.main);
  27. cameraObject.SetActive(true);
  28. subCamera.clearFlags = CameraClearFlags.Depth;
  29. subCamera.cullingMask = 256;
  30. subCamera.depth = 1f;
  31. subCamera.transform.parent = GameMain.Instance.MainCamera.transform;
  32. bgObject.SetActive(true);
  33. GameMain.Instance.BgMgr.ChangeBg("Theater");
  34. GameMain.Instance.MainCamera.GetComponent<Camera>().backgroundColor = new Color(0.0f, 0.0f, 0.0f);
  35. UltimateOrbitCamera UOCamera =
  36. Utility.GetFieldValue<CameraMain, UltimateOrbitCamera>(GameMain.Instance.MainCamera, "m_UOCamera");
  37. UOCamera.enabled = true;
  38. GameMain.Instance.MainLight.Reset();
  39. GameMain.Instance.CharacterMgr.ResetCharaPosAll();
  40. ResetCamera();
  41. SaveCameraInfo();
  42. }
  43. public void Deactivate()
  44. {
  45. GameObject.Destroy(cameraObject);
  46. GameObject.Destroy(subCamera);
  47. }
  48. public void Update()
  49. {
  50. if (Input.GetKey(KeyCode.Q))
  51. {
  52. if (Input.GetKeyDown(KeyCode.S))
  53. {
  54. SaveCameraInfo();
  55. }
  56. if (Input.GetKeyDown(KeyCode.A))
  57. {
  58. LoadCameraInfo(cameraInfo);
  59. }
  60. if (Input.GetKeyDown(KeyCode.R))
  61. {
  62. ResetCamera();
  63. }
  64. }
  65. PropManager.Update();
  66. LightManager.Update();
  67. }
  68. public void ChangeBackground(string assetName, bool creative = false)
  69. {
  70. if (creative)
  71. {
  72. GameMain.Instance.BgMgr.ChangeBgMyRoom(assetName);
  73. }
  74. else
  75. {
  76. GameMain.Instance.BgMgr.ChangeBg(assetName);
  77. if (assetName == "KaraokeRoom")
  78. {
  79. bg.transform.position = bgObject.transform.position;
  80. bg.transform.localPosition = new Vector3(1f, 0f, 4f);
  81. bg.transform.localRotation = Quaternion.Euler(new Vector3(0f, 90f, 0f));
  82. }
  83. }
  84. }
  85. private void SaveCameraInfo()
  86. {
  87. this.cameraInfo = new CameraInfo(GameMain.Instance.MainCamera);
  88. }
  89. public void LoadCameraInfo(CameraInfo cameraInfo)
  90. {
  91. CameraMain camera = GameMain.Instance.MainCamera;
  92. camera.SetTargetPos(cameraInfo.TargetPos);
  93. camera.SetPos(cameraInfo.Pos);
  94. camera.SetDistance(cameraInfo.Distance);
  95. camera.transform.eulerAngles = cameraInfo.Angle;
  96. }
  97. private void ResetCamera()
  98. {
  99. CameraMain cameraMain = GameMain.Instance.MainCamera;
  100. cameraMain.Reset(CameraMain.CameraType.Target, true);
  101. cameraMain.SetTargetPos(new Vector3(0f, 0.9f, 0f), true);
  102. cameraMain.SetDistance(3f, true);
  103. }
  104. }
  105. public struct CameraInfo
  106. {
  107. public Vector3 TargetPos { get; private set; }
  108. public Vector3 Pos { get; private set; }
  109. public Vector3 Angle { get; private set; }
  110. public float Distance { get; private set; }
  111. public CameraInfo(CameraMain camera)
  112. {
  113. this.TargetPos = camera.GetTargetPos();
  114. this.Pos = camera.GetPos();
  115. this.Angle = camera.transform.eulerAngles;
  116. this.Distance = camera.GetDistance();
  117. }
  118. }
  119. }