shadowx320

CameraHandler

Mar 19th, 2021 (edited)
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.38 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5.  
  6. namespace SG
  7. {
  8.     public class CameraHandler : MonoBehaviour
  9.     {
  10.         public Transform targetTransform;
  11.         public Transform cameraTransform;
  12.         public Transform cameraPivotTransform;
  13.         private Transform myTransform;
  14.         private Vector3 cameraTransformPosition;
  15.         private LayerMask ignoreLayers;
  16.         private Vector3 cameraFollowVelocity = Vector3.zero;
  17.  
  18.         public static CameraHandler singleton;
  19.  
  20.         public float lookSpeed = 0.1f;
  21.         public float followSpeed = 0.1f;
  22.         public float pivotSpeed = 0.03f;
  23.  
  24.         private float targetPosition;
  25.         private float defaultPosition;
  26.         private float lookAngle;
  27.         private float pivotAngle;
  28.         public float minimumPivot = -35;
  29.         public float maximumPivot = 35;
  30.  
  31.         public float cameraSphereRadius = 0.2f;
  32.         public float cameraCollisionOffSet = 0.2f;
  33.         public float minimumCollisionOffSet = 0.2f;
  34.  
  35.  
  36.  
  37.         private void Awake()
  38.         {
  39.             singleton = this;
  40.             myTransform = transform;
  41.             defaultPosition = cameraTransform.localPosition.z;
  42.             ignoreLayers = ~(1 << 8 | 1 << 9 | 1 << 10);
  43.         }
  44.  
  45.         public void FollowTarget(float delta)
  46.         {
  47.             Vector3 targetPosition = Vector3.SmoothDamp
  48.                 (myTransform.position, targetTransform.position, ref cameraFollowVelocity, delta / followSpeed);                            // Changed from Lerp to SmoothDamp
  49.             myTransform.position = targetPosition;
  50.  
  51.             HandleCameraCollisions(delta);
  52.         }
  53.  
  54.         public void HandleCameraRotation(float delta, float mouseXInput, float mouseYInput)
  55.         {
  56.             lookAngle += (mouseXInput * lookSpeed) / delta;
  57.             lookAngle -= (mouseYInput * pivotSpeed) / delta;
  58.             pivotAngle = Mathf.Clamp(pivotAngle, minimumPivot, maximumPivot);
  59.  
  60.             Vector3 rotation = Vector3.zero;
  61.             rotation.y = lookAngle;
  62.             Quaternion targetRotation = Quaternion.Euler(rotation);
  63.             myTransform.rotation = targetRotation;
  64.  
  65.             rotation = Vector3.zero;
  66.             rotation.x = pivotAngle;
  67.  
  68.             targetRotation = Quaternion.Euler(rotation);
  69.             cameraPivotTransform.localRotation = targetRotation;
  70.         }
  71.  
  72.         private void HandleCameraCollisions(float delta)
  73.         {
  74.             targetPosition = defaultPosition;
  75.             RaycastHit hit;
  76.             Vector3 direction = cameraTransform.position - cameraPivotTransform.position;
  77.             direction.Normalize();
  78.  
  79.             if (Physics.SphereCast
  80.                 (cameraPivotTransform.position, cameraSphereRadius, direction, out hit, Mathf.Abs(targetPosition)
  81.                 , ignoreLayers))
  82.             {
  83.                 float dis = Vector3.Distance(cameraPivotTransform.position, hit.point);
  84.                 targetPosition = -(dis - cameraCollisionOffSet);
  85.             }
  86.  
  87.             if (Mathf.Abs(targetPosition) < minimumCollisionOffSet)
  88.             {
  89.                 targetPosition = -minimumCollisionOffSet;
  90.             }
  91.  
  92.             cameraTransformPosition.z = Mathf.Lerp(cameraTransform.localPosition.z, targetPosition, delta / 0.2f);
  93.             cameraTransform.localPosition = cameraTransformPosition;
  94.         }
  95.     }
  96. }
  97.  
  98.  
Add Comment
Please, Sign In to add comment