Advertisement
knowitallninja

Camera Follow - Collision Issues

Oct 12th, 2019
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.68 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class cameraController : MonoBehaviour {
  6.  
  7.     public GameObject target;
  8.  
  9.     private float _desiredDistance = 5f;
  10.     private float _maxDriftRange = .5f;
  11.  
  12.     private float _pitch = 0f;
  13.     private float _pitchMin = -40f;
  14.     private float _pitchMax = 60f;
  15.     private float _yaw = 0f;
  16.     private float _roll = 0f;
  17.     private float _sensitivity = 5f;
  18.  
  19.     void Start() {
  20.         Cursor.visible = false;
  21.         Cursor.lockState = CursorLockMode.Locked;
  22.     }
  23.  
  24.     void LateUpdate() {
  25.         CamControl();
  26.     }
  27.  
  28.     void CamControl() {
  29.  
  30.         _pitch -= _sensitivity * Input.GetAxis("Mouse Y");
  31.         _yaw += _sensitivity * Input.GetAxis("Mouse X");
  32.  
  33.         _pitch = Mathf.Clamp(_pitch, _pitchMin, _pitchMax);
  34.  
  35.         transform.localEulerAngles = new Vector3(_pitch, _yaw, _roll);
  36.  
  37.         Vector3 camTargetPos = target.transform.position - _desiredDistance * transform.forward;
  38.         float t = Vector3.Distance(transform.position, camTargetPos) / _maxDriftRange;
  39.  
  40.         float offset = ViewObstructed();
  41.  
  42.         transform.position = Vector3.Lerp(transform.position, camTargetPos + offset * transform.forward, t * Time.deltaTime);
  43.         transform.LookAt(target.transform);
  44.  
  45.     }
  46.  
  47.     float ViewObstructed() {
  48.         float hitDistance = 0;
  49.         RaycastHit hit;
  50.         if (Physics.Raycast(target.transform.position, transform.position - target.transform.position, out hit, 3f)) {
  51.             if (hit.collider.gameObject.tag != "Player") {
  52.                 hitDistance = _desiredDistance - hit.distance;
  53.             }
  54.         }
  55.         return hitDistance;
  56.     }
  57.  
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement