123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
- public class SmoothFollowCShap : MonoBehaviour
- {
-
- /*
- This camera smoothes out rotation around the y-axis and height.
- Horizontal Distance to the target is always fixed.
- There are many different ways to smooth the rotation but doing it this way gives you a lot of control over how the camera behaves.
- For every of those smoothed values we calculate the wanted value and the current value.
- Then we smooth it using the Lerp function.
- Then we apply the smoothed values to the transform's position.
- */
- // The target we are following
- public Transform target;
- // The distance in the x-z plane to the target
- public float distance = 10.0f;
- // the height we want the camera to be above the target
- public float height = 5.0f;
- // How much we
- public float heightDamping = 0.5f;
- public float rotationDamping = 0.3f;
- private float _RefRotation = 0f;
- private float _RefHigh = 0f;
-
- void LateUpdate()
- {
- // Early out if we don't have a target
- if (!target)
- return;
-
- // Calculate the current rotation angles
- float wantedRotationAngle = target.eulerAngles.y;
- float wantedHeight = target.position.y + height;
- float currentRotationAngle = transform.eulerAngles.y;
- float currentHeight = transform.position.y;
- // Damp the rotation around the y-axis
- currentRotationAngle = Mathf.SmoothDampAngle(currentRotationAngle, wantedRotationAngle, ref _RefRotation, rotationDamping);
- // Damp the height
- currentHeight = Mathf.SmoothDamp(currentHeight, wantedHeight, ref _RefHigh, heightDamping);
- // Convert the angle into a rotation
- Quaternion currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
- // Set the position of the camera on the x-z plane to:
- // distance meters behind the target
- transform.position = target.position;
- transform.position -= currentRotation * Vector3.forward * distance;
- // Set the height of the camera
- // transform.position = new Vector3(transform.position.x, currentHeight, transform.position.z);
- //transform.position.Set(transform.position.x, currentHeight, transform.position.z);
- // Always look at the target
- transform.LookAt(target);
-
- }
-
- }
|