Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class cameraController : MonoBehaviour {
- public GameObject target;
- private float _desiredDistance = 5f;
- private float _maxDriftRange = .5f;
- private float _pitch = 0f;
- private float _pitchMin = -40f;
- private float _pitchMax = 60f;
- private float _yaw = 0f;
- private float _roll = 0f;
- private float _sensitivity = 5f;
- void Start() {
- Cursor.visible = false;
- Cursor.lockState = CursorLockMode.Locked;
- }
- void LateUpdate() {
- CamControl();
- }
- void CamControl() {
- _pitch -= _sensitivity * Input.GetAxis("Mouse Y");
- _yaw += _sensitivity * Input.GetAxis("Mouse X");
- _pitch = Mathf.Clamp(_pitch, _pitchMin, _pitchMax);
- transform.localEulerAngles = new Vector3(_pitch, _yaw, _roll);
- Vector3 camTargetPos = target.transform.position - _desiredDistance * transform.forward;
- float t = Vector3.Distance(transform.position, camTargetPos) / _maxDriftRange;
- float offset = ViewObstructed();
- transform.position = Vector3.Lerp(transform.position, camTargetPos + offset * transform.forward, t * Time.deltaTime);
- transform.LookAt(target.transform);
- }
- float ViewObstructed() {
- float hitDistance = 0;
- RaycastHit hit;
- if (Physics.Raycast(target.transform.position, transform.position - target.transform.position, out hit, 3f)) {
- if (hit.collider.gameObject.tag != "Player") {
- hitDistance = _desiredDistance - hit.distance;
- }
- }
- return hitDistance;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement