using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityStandardAssets.Characters.FirstPerson; namespace UnityCommon { /// /// µÚÒ»ÈË³Æ /// public class FPState : CameraState { MyFirstPersonController fpsController; CharacterController characterController; private Vector3 initPosition; private Vector3 initRotation; Transform tfCameraPosition; private float rotation_y; public FPState(Camera camera, Vector3 position, Quaternion rotation, MyFirstPersonController controller) : base(camera) { fpsController = controller; characterController = fpsController.GetComponent(); initPosition = position; initRotation = rotation.eulerAngles; tfCameraPosition = fpsController.transform.Find("CameraPosition"); rotation_y = rotation.eulerAngles.y; //fpsController.transform.rotation = rotation; //fpsController.MouseLookInit(); //initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, m_camera.transform.rotation.eulerAngles.y, 0); //fpsController?.MouseLookInit(); } private float oldfarClipPlane = 5000; public override void Enter() { base.Enter(); EnableFPS = false; //Vector3 oldPosition = m_camera.transform.position; //Quaternion oldRotation = m_camera.transform.rotation; //Transform oldParent = m_camera.transform.parent; m_camera.transform.SetParent(null); fpsController.transform.position = initPosition; fpsController.transform.rotation = Quaternion.Euler(0, rotation_y, 0); //m_camera.transform.SetParent(oldParent); m_camera.transform.SetParent(tfCameraPosition.parent); //m_camera.transform.position = oldPosition; //m_camera.transform.rotation = oldRotation; oldfarClipPlane = m_camera.farClipPlane; m_camera.farClipPlane = 500; //cameraCtrl.cameraMain.farClipPlane = 500; //initRotation = new Vector3(cameraCtrl.tfCameraMain.rotation.eulerAngles.x, cameraCtrl.tfFPSController.rotation.eulerAngles.y, 0); //SetCameraPosition(tfCameraPosition.position, Quaternion.Euler(initRotation), () => //{ // EnableFPS = true; // fpsController.MouseLookInit(); //}); SetCameraPosition(tfCameraPosition.position, tfCameraPosition.rotation, () => { EnableFPS = true; fpsController.MouseLookInit(); }); } private bool EnableFPS { set { fpsController.enabled = value; characterController.enabled = value; } get { return fpsController.enabled; } } public override void Exit() { base.Exit(); EnableFPS = false; m_camera.farClipPlane = oldfarClipPlane; } public override void Update() { base.Update(); initPosition = fpsController.transform.position; initRotation = new Vector3(m_camera.transform.rotation.eulerAngles.x, fpsController.transform.rotation.eulerAngles.y, 0); } } }