今天开始看一个js的游戏范例,这里结合上次学习的mathf.smooth函数功能做了点修改,同样改写成c#贴在这里,说明一下这里没有做更多功能的封装,适合于第三人称的一个视角操作哈,大家喜欢可以拿去改改(地址:http://www.kuaipan.cn/file/id_12421281643248537.htm):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
using
UnityEngine;
using
System.Collections;
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);
}
}
|