BigETI

SmoothCameraScript.cs

Jun 13th, 2018
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.13 KB | None | 0 0
  1. using UnityEngine;
  2.  
  3. /// <summary>
  4. /// Smooth camera script class
  5. /// </summary>
  6. public class SmoothCameraScript : MonoBehaviour
  7. {
  8.     /// <summary>
  9.     /// Spherical interpolation time multiplier
  10.     /// </summary>
  11.     [SerializeField]
  12.     private float slerpTimeMultiplier = 4.0f;
  13.  
  14.     /// <summary>
  15.     /// Third person offset
  16.     /// </summary>
  17.     [SerializeField]
  18.     private Vector3 thirdPersonOffset = new Vector3(0.0f, 5.0f, -5.0f);
  19.  
  20.     /// <summary>
  21.     /// First person offset
  22.     /// </summary>
  23.     [SerializeField]
  24.     private Vector3 firstPersonOffset = new Vector3(0.0f, 0.0f, 0.0f);
  25.  
  26.     /// <summary>
  27.     /// Camera state
  28.     /// </summary>
  29.     [SerializeField]
  30.     private ECameraState cameraState = ECameraState.ThirdPerson;
  31.  
  32.     /// <summary>
  33.     /// Follow anti gravity vehicle
  34.     /// </summary>
  35.     private AGVControllerScript followAGV;
  36.  
  37.     /// <summary>
  38.     /// Follow anti gravity vehicle
  39.     /// </summary>
  40.     public AGVControllerScript FollowAGV
  41.     {
  42.         get
  43.         {
  44.             return followAGV;
  45.         }
  46.         set
  47.         {
  48.             if (value != null)
  49.             {
  50.                 followAGV = value;
  51.             }
  52.         }
  53.     }
  54.  
  55.     /// <summary>
  56.     /// Update
  57.     /// </summary>
  58.     private void Update()
  59.     {
  60.         if (followAGV != null)
  61.         {
  62.             if (Input.GetButtonDown("Camera"))
  63.             {
  64.                 switch (cameraState)
  65.                 {
  66.                     case ECameraState.ThirdPerson:
  67.                         cameraState = ECameraState.FirstPerson;
  68.                         break;
  69.                     case ECameraState.FirstPerson:
  70.                         cameraState = ECameraState.ThirdPerson;
  71.                         break;
  72.                 }
  73.             }
  74.             if (cameraState == ECameraState.FirstPerson)
  75.             {
  76.                 Transform t = followAGV.transform;
  77.                 transform.position = t.position + (t.right * firstPersonOffset.x) + (t.up * firstPersonOffset.y) + (t.forward * firstPersonOffset.z);
  78.                 transform.rotation = t.rotation;
  79.             }
  80.         }
  81.     }
  82.  
  83.     /// <summary>
  84.     /// Fixed update
  85.     /// </summary>
  86.     private void FixedUpdate()
  87.     {
  88.         if (followAGV != null)
  89.         {
  90.             Transform t = followAGV.transform;
  91.             if (cameraState == ECameraState.ThirdPerson)
  92.             {
  93.                 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);
  94.                 if (followAGV.IsOnAntiGravity)
  95.                 {
  96.                     transform.rotation = Quaternion.Slerp(transform.rotation, followAGV.transform.rotation, slerpTimeMultiplier * Time.fixedDeltaTime);
  97.                 }
  98.                 else
  99.                 {
  100.                     transform.LookAt(Vector3.Slerp(transform.position + transform.forward, t.position, slerpTimeMultiplier * Time.fixedDeltaTime));
  101.                 }
  102.             }
  103.         }
  104.     }
  105. }
Advertisement
Add Comment
Please, Sign In to add comment