FPState.cs 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityStandardAssets.Characters.FirstPerson;
  5. namespace UnityCommon
  6. {
  7. /// <summary>
  8. /// µÚÒ»È˳Æ
  9. /// </summary>
  10. public class FPState : CameraState
  11. {
  12. MyFirstPersonController fpsController;
  13. CharacterController characterController;
  14. private Vector3 initPosition;
  15. private Vector3 initRotation;
  16. Transform tfCameraPosition;
  17. private float rotation_y;
  18. public FPState(Camera camera, Vector3 position, Quaternion rotation, MyFirstPersonController controller) : base(camera)
  19. {
  20. fpsController = controller;
  21. characterController = fpsController.GetComponent<CharacterController>();
  22. initPosition = position;
  23. initRotation = rotation.eulerAngles;
  24. tfCameraPosition = fpsController.transform.Find("CameraPosition");
  25. rotation_y = rotation.eulerAngles.y;
  26. //fpsController.transform.rotation = rotation;
  27. //fpsController.MouseLookInit();
  28. //initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, m_camera.transform.rotation.eulerAngles.y, 0);
  29. //fpsController?.MouseLookInit();
  30. }
  31. private float oldfarClipPlane = 5000;
  32. public override void Enter()
  33. {
  34. base.Enter();
  35. EnableFPS = false;
  36. //Vector3 oldPosition = m_camera.transform.position;
  37. //Quaternion oldRotation = m_camera.transform.rotation;
  38. //Transform oldParent = m_camera.transform.parent;
  39. m_camera.transform.SetParent(null);
  40. fpsController.transform.position = initPosition;
  41. fpsController.transform.rotation = Quaternion.Euler(0, rotation_y, 0);
  42. //m_camera.transform.SetParent(oldParent);
  43. m_camera.transform.SetParent(tfCameraPosition.parent);
  44. //m_camera.transform.position = oldPosition;
  45. //m_camera.transform.rotation = oldRotation;
  46. oldfarClipPlane = m_camera.farClipPlane;
  47. m_camera.farClipPlane = 500;
  48. //cameraCtrl.cameraMain.farClipPlane = 500;
  49. //initRotation = new Vector3(cameraCtrl.tfCameraMain.rotation.eulerAngles.x, cameraCtrl.tfFPSController.rotation.eulerAngles.y, 0);
  50. //SetCameraPosition(tfCameraPosition.position, Quaternion.Euler(initRotation), () =>
  51. //{
  52. // EnableFPS = true;
  53. // fpsController.MouseLookInit();
  54. //});
  55. SetCameraPosition(tfCameraPosition.position, tfCameraPosition.rotation, () =>
  56. {
  57. EnableFPS = true;
  58. fpsController.MouseLookInit();
  59. });
  60. }
  61. private bool EnableFPS
  62. {
  63. set
  64. {
  65. fpsController.enabled = value;
  66. characterController.enabled = value;
  67. }
  68. get { return fpsController.enabled; }
  69. }
  70. public override void Exit()
  71. {
  72. base.Exit();
  73. EnableFPS = false;
  74. m_camera.farClipPlane = oldfarClipPlane;
  75. }
  76. public override void Update()
  77. {
  78. base.Update();
  79. initPosition = fpsController.transform.position;
  80. initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, fpsController.transform.rotation.eulerAngles.y, 0);
  81. }
  82. }
  83. }