1 using UnityEngine;
2
3 namespace
UnityStandardAssets.Utility
4 {
5     
public class SmoothFollow : MonoBehaviour
6     {
7
8         
// The target we are following
9         
[SerializeField]
10         
private Transform target;
11         
// The distance in the x-z plane to the target
12         
[SerializeField]
13         
private float distance = 10.0f;
14         
// the height we want the camera to be above the target
15         
[SerializeField]
16         
private float height = 5.0f;
17
18         
[SerializeField]
19         
private float rotationDamping;
20         
[SerializeField]
21         
private float heightDamping;
22
23         
// Use this for initialization
24         
void Start() { }
25
26         
// Update is called once per frame
27         
void LateUpdate()
28         {
29             
// Early out if we don't have a target
30             
if (!target)
31                 
return;
32
33             
// Calculate the current rotation angles
34             
var wantedRotationAngle = target.eulerAngles.y;
35             
var wantedHeight = target.position.y + height;
36
37             
var currentRotationAngle = transform.eulerAngles.y;
38             
var currentHeight = transform.position.y;
39
40             
// Damp the rotation around the y-axis
41             currentRotationAngle = Mathf.LerpAngle(currentRotationAngle, wantedRotationAngle, rotationDamping * Time.deltaTime);
42
43             
// Damp the height
44             currentHeight = Mathf.Lerp(currentHeight, wantedHeight, heightDamping * Time.deltaTime);
45
46             
// Convert the angle into a rotation
47             
var currentRotation = Quaternion.Euler(0, currentRotationAngle, 0);
48
49             
// Set the position of the camera on the x-z plane to:
50             
// distance meters behind the target
51             transform.position = target.position;
52             transform.position -= currentRotation * Vector3.forward * distance;
53
54             
// Set the height of the camera
55             transform.position =
new Vector3(transform.position.x ,currentHeight , transform.position.z);
56
57             
// Always look at the target
58             transform.LookAt(target);
59         }
60     }
61 }


The target we are following

The distance in the x-z plane to the target

the height we want the camera to be above the target

Use this for initialization

Update is called once per frame

Early out if we don't have a target

Calculate the current rotation angles

Damp the rotation around the y-axis

Damp the height

Convert the angle into a rotation

Set the position of the camera on the x-z plane to:

distance meters behind the target

Set the height of the camera

Always look at the target



Gõ tìm kiếm nhanh...