Unity 常用的几种相机跟随
2016-11-30 13:23
309 查看
固定相机跟随
这种相机有一个参考对象,它会保持与该参考对象固定的位置,跟随改参考对象发生移动using UnityEngine; using System.Collections; public class CameraFlow : MonoBehaviour { public Transform target; private Vector3 offset; // Use this for initialization void Start() { offset = target.position - this.transform.position; } // Update is called once per frame void Update() { this.transform.position = target.position - offset; } }1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
固定相机跟随,带有角度旋转
这一种相机跟随是对第一种相机跟随的改进,在原有基础上面,添加了跟随角度的控制using UnityEngine; using System.Collections; public class CameriaTrack : MonoBehaviour { private Vector3 offset = new Vector3(0,5,4);//相机相对于玩家的位置 private Transform target; private Vector3 pos; public float speed = 2; // Use this for initialization void Start () { target = GameObject.FindGameObjectWithTag("Player").transform; } // Update is called once per frame void Update () { pos = target.position + offset; this.transform.position = Vector3.Lerp(this.transform.position, pos, speed*Time.deltaTime);//调整相机与玩家之间的距离 Quaternion angel = Quaternion.LookRotation(target.position - this.transform.position);//获取旋转角度 this.transform.rotation = Quaternion.Slerp(this.transform.rotation, angel, speed * Time.deltaTime); } }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
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
第三人称相机
这种相机跟随,是第三人称角度看向对象的,也就是一直看向对象的后面,如一直显示玩家的后背using UnityEngine; using System.Collections; //相机一直拍摄主角的后背 public class CameraFlow : MonoBehaviour { public Transform target; public float distanceUp=15f; public float distanceAway = 10f; public float smooth = 2f;//位置平滑移动值 public float camDepthSmooth = 5f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { // 鼠标轴控制相机的远近 if ((Input.mouseScrollDelta.y < 0 && Camera.main.fieldOfView >= 3) || Input.mouseScrollDelta.y > 0 && Camera.main.fieldOfView <= 80) { Camera.main.fieldOfView += Input.mouseScrollDelta.y * camDepthSmooth * Time.deltaTime; } } void LateUpdate() { //相机的位置 Vector3 disPos = target.position + Vector3.up * distanceUp - target.forward * distanceAway; transform.position=Vector3.Lerp(transform.position,disPos,Time.deltaTime*smooth); //相机的角度 transform.LookAt(target.position); } }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
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
相机跟随,鼠标控制移动和缩放
相机与观察对象保持一定距离,可以通过鼠标进行上下左右旋转,通过鼠标滚轮进行放大和缩小操作using UnityEngine; using System.Collections; public class CameraFlow : MonoBehaviour { public Transform target; Vector3 offset; // Use this for initialization void Start() { offset = transform.position - target.position; } // Update is called once per frame void Update() { transform.position = target.position + offset; Rotate(); Scale(); } //缩放 private void Scale() { float dis = offset.magnitude; dis += Input.GetAxis("Mouse ScrollWheel") * 5; Debug.Log("dis=" + dis); if (dis < 10 || dis > 40) { return; } offset = offset.normalized * dis; } //左右上下移动 private void Rotate() { if (Input.GetMouseButton(1)) { Vector3 pos = transform.position; Vector3 rot = transform.eulerAngles; //围绕原点旋转,也可以将Vector3.zero改为 target.position,就是围绕观察对象旋转 transform.RotateAround(Vector3.zero, Vector3.up, Input.GetAxis("Mouse X") * 10); transform.RotateAround(Vector3.zero, Vector3.left, Input.GetAxis("Mouse Y") * 10); float x = transform.eulerAngles.x; float y = transform.eulerAngles.y; Debug.Log("x=" + x); Debug.Log("y=" + y); //控制移动范围 if (x < 20 || x > 45 || y < 0 || y > 40) { transform.position = pos; transform.eulerAngles = rot; } // 更新相对差值 offset = transform.position - target.position; } } }
相关文章推荐
- unity 常用的几种相机跟随
- unity 常用的几种相机跟随
- Unity中几种简单的相机跟随
- Unity粒子系统,探照灯效果,相机跟随
- Unity平滑相机跟随
- unity 相机跟随人物
- unity相机旋转,缩放与跟随
- unity 相机跟随
- Unity几种常用的设计模式
- Unity 2D游戏相机跟随
- Unity相机视野的缩放,旋转及跟随
- unity之--相机跟随移动
- unity 赛车相机跟随物体移动
- Unity中相机跟随
- unity 相机跟随物体(角色)
- Unity中实现相机平滑且流畅的跟随玩家(或其他对象)
- Unity中UGUI人物血条跟随的几种实现方式(一)
- 【Unity 3D】常用播放视频的几种方式
- Unity中常用的几种设计模式
- unity 利用差值实现相机跟随与轴值实现人物拉近