public void SetState(EzCameraState.State nextState) { switch (nextState) { case EzCameraState.State.FOLLOW: SetFollowEnabled(true); m_stateMachine.SetCurrentState(m_followState); break; case EzCameraState.State.ORBIT: SetOrbitEnabled(true); m_stateMachine.SetCurrentState(m_orbitState); break; case EzCameraState.State.LOCKON: SetLockOnEnabled(true); m_stateMachine.SetCurrentState(m_lockOnState); break; case EzCameraState.State.STATIONARY: default: if (m_stationaryState == null) { m_stationaryState = new EzStationaryState(this, m_settings); if (CameraController != null) { CameraController.HandleInputCallback = null; } } m_stateMachine.SetCurrentState(m_stationaryState); break; } }
private void Start() { m_transform = this.transform; // reset the offset distance be 1/3 of the distance from the min to max if (m_settings != null) { m_settings.OffsetDistance = (m_settings.MaxDistance - m_settings.MinDistance) / 3f; m_settings.DesiredDistance = m_settings.OffsetDistance; m_settings.StoreDefaultValues(); m_relativePosition = (m_target.position + (Vector3.up * m_settings.OffsetHeight)) + (m_transform.rotation * (Vector3.forward * -m_settings.OffsetDistance)) + (m_transform.right * m_settings.LateralOffset); m_transform.position = m_relativePosition; } CameraController = this.GetOrAddComponent <EzCameraController>(); CameraController.Init(this); SetLockOnEnabled(m_lockOnEnabled); SetFollowEnabled(m_followEnabled); SetOrbitEnabled(m_orbitEnabled); if (m_checkForCollisions) { m_cameraCollilder = this.GetOrAddComponent <EzCameraCollider>(); } m_stateMachine = new EzStateMachine(); m_defaultState = m_followEnabled ? EzCameraState.State.FOLLOW : EzCameraState.State.STATIONARY; SetState(m_defaultState); }