Unity - 相机跟随
2021-01-15 03:12
标签:vat nio put date() generic distance ble 鼠标 距离
Unity - 相机跟随 标签:vat nio put date() generic distance ble 鼠标 距离 原文地址:https://www.cnblogs.com/ChenZiRong1999/p/12938976.html相机跟随的几种方式
1. 单纯的相机固定跟随
相机保持与目标对象一定的相对距离,跟随目标对象发生移动
将脚本挂载到指定的 Camera 上,并给 Target 字段赋值一个跟随的目标对象
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class CameraFollow_A : MonoBehaviour
6 {
7 public Transform target; //目标对象
8 private Vector3 offset; //距离差
9
10 void Start()
11 {
12 offset = target.position - this.transform.position;
13 }
14
15 void Update()
16 {
17 this.transform.position = target.position - offset;
18 }
19 }
2. 带有旋转角度的相机固定跟随
这一种方法在第一种相机跟随的基础上,添加了相机跟随的角度
同样挂载到指定的 Camera 上,相机将按照指定角度跟随目标对象
可以通过调节 Speed 字段的值,调整相机跟随的平滑度
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class CameraFollow_B : MonoBehaviour
6 {
7 private Transform target; //目标对象
8 private Vector3 offset = new Vector3(0, 7, -6); //相机与目标对象的相对位置
9 private Vector3 pos;
10 public float speed = 2; //旋转的平滑速度
11
12 void Start()
13 {
14 //利用标签Tag锁定所要跟随的目标对象
15 target = GameObject.FindGameObjectWithTag("Player").transform;
16 }
17
18 void Update()
19 {
20 pos = target.position + offset;
21 this.transform.position = Vector3.Lerp(this.transform.position, pos, speed * Time.deltaTime); //调整相机与目标对象的距离
22 Quaternion angel = Quaternion.LookRotation(target.position - this.transform.position); //获取旋转角度
23 this.transform.rotation = Quaternion.Slerp(this.transform.rotation, angel, speed * Time.deltaTime);
24 }
25 }
3. 第三人称相机跟随
相机始终以第三人称视角看向目标对象,并进行跟随
同样将脚本挂载到指定的 Camera 上,相机将始终以第三人称视角跟随目标对象
通过 DistanceUp / DistanceAway 字段调整相机角度
通过 Smooth 字段调节相机移动的平滑程度
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class CameraFollow_C : MonoBehaviour
6 {
7 public Transform target; //目标对象
8
9 public float distanceUp = 8f; //相机与目标对象竖直方向的距离
10 public float distanceAway = 10f; //相机与目标对象前后方向的距离
11 public float smooth = 10f; //移动平滑值
12
13 void Update()
14 {
15 // 通过鼠标轴控制相机的远近
16 if ((Input.mouseScrollDelta.y 0 && Camera.main.fieldOfView >= 3) ||
17 Input.mouseScrollDelta.y > 0 && Camera.main.fieldOfView 80)
18 {
19 Camera.main.fieldOfView += Input.mouseScrollDelta.y * Time.deltaTime;
20 }
21 }
22
23 void LateUpdate()
24 {
25 //更新相机的位置
26 Vector3 disPos = target.position + Vector3.up * distanceUp - target.forward * distanceAway;
27 transform.position = Vector3.Lerp(transform.position, disPos, Time.deltaTime * smooth);
28 //更新相机的角度
29 transform.LookAt(target.position);
30 }
31 }
4. 鼠标控制相机旋转和缩放
通过鼠标控制相机围绕目标对象上下左右的旋转、视角的缩放
将脚本挂载到指定的 Camera 上,给 Target 字段赋值一个目标对象
按住鼠标左键控制相机的旋转,中键滚轮控制相机视角的缩放
1 using System.Collections;
2 using System.Collections.Generic;
3 using UnityEngine;
4
5 public class CameraFollow_D : MonoBehaviour
6 {
7 public Transform target; //目标对象
8 private Vector3 Rotion_Transform;
9 private new Camera camera;
10
11 void Start()
12 {
13 camera = GetComponent