unity3d中平滑跟随的功能实现!!!!

今天开始看一个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);
          
     }
}

你可能感兴趣的:(Unity3d)