Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- /// <summary>
- /// Smooth camera script class
- /// </summary>
- public class SmoothCameraScript : MonoBehaviour
- {
- /// <summary>
- /// Spherical interpolation time multiplier
- /// </summary>
- [SerializeField]
- private float slerpTimeMultiplier = 4.0f;
- /// <summary>
- /// Third person offset
- /// </summary>
- [SerializeField]
- private Vector3 thirdPersonOffset = new Vector3(0.0f, 5.0f, -5.0f);
- /// <summary>
- /// First person offset
- /// </summary>
- [SerializeField]
- private Vector3 firstPersonOffset = new Vector3(0.0f, 0.0f, 0.0f);
- /// <summary>
- /// Camera state
- /// </summary>
- [SerializeField]
- private ECameraState cameraState = ECameraState.ThirdPerson;
- /// <summary>
- /// Follow anti gravity vehicle
- /// </summary>
- private AGVControllerScript followAGV;
- /// <summary>
- /// Follow anti gravity vehicle
- /// </summary>
- public AGVControllerScript FollowAGV
- {
- get
- {
- return followAGV;
- }
- set
- {
- if (value != null)
- {
- followAGV = value;
- }
- }
- }
- /// <summary>
- /// Update
- /// </summary>
- private void Update()
- {
- if (followAGV != null)
- {
- if (Input.GetButtonDown("Camera"))
- {
- switch (cameraState)
- {
- case ECameraState.ThirdPerson:
- cameraState = ECameraState.FirstPerson;
- break;
- case ECameraState.FirstPerson:
- cameraState = ECameraState.ThirdPerson;
- break;
- }
- }
- if (cameraState == ECameraState.FirstPerson)
- {
- Transform t = followAGV.transform;
- transform.position = t.position + (t.right * firstPersonOffset.x) + (t.up * firstPersonOffset.y) + (t.forward * firstPersonOffset.z);
- transform.rotation = t.rotation;
- }
- }
- }
- /// <summary>
- /// Fixed update
- /// </summary>
- private void FixedUpdate()
- {
- if (followAGV != null)
- {
- Transform t = followAGV.transform;
- if (cameraState == ECameraState.ThirdPerson)
- {
- transform.position = Vector3.Slerp(transform.position, t.position + (t.right * thirdPersonOffset.x) + (t.up * thirdPersonOffset.y) + (t.forward * (followAGV.IsLookingBehind ? -thirdPersonOffset.z : thirdPersonOffset.z)), slerpTimeMultiplier * Time.fixedDeltaTime);
- if (followAGV.IsOnAntiGravity)
- {
- transform.rotation = Quaternion.Slerp(transform.rotation, followAGV.transform.rotation, slerpTimeMultiplier * Time.fixedDeltaTime);
- }
- else
- {
- transform.LookAt(Vector3.Slerp(transform.position + transform.forward, t.position, slerpTimeMultiplier * Time.fixedDeltaTime));
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment