EnvironmentManager.cs 5.2 KB

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