EnvironmentManager.cs 3.8 KB

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