赞
踩
我们需要实现简易的,泛用性高的第三人称相机跟随,通过鼠标滚轮可以控制与对象物体的远近距离,按住鼠标右键拖动鼠标可以控制相机视角跟随物体旋转,并且相机始终朝向游戏对象。
1.在层级区域把主相机拖入玩家物体作为玩家的子层级,并且调整好适当的距离。
2.因为后期会用到标签查找,所以需要在右上角Inspector区域把玩家的标签设置为“Player”。
3.创建脚本,脚本名称为“CameraFollow”,创建完后挂载到相机上。(脚本名称也可以自拟,但是复制时要注意名字,Unity中的代码文件名和代码中的命名空间一定要一致)
- using System.Collections;
- using System.Collections.Generic;
- using UnityEngine;
-
- public class CameraFollow : MonoBehaviour {
-
- private Transform player;//玩家位置
- private Vector3 offsetPosition; //位置偏移
- private bool mouse1Down;//是否按下鼠标右键
-
- public float distance;
- public float scrollSpeed = 10;//视野远近变化的速度
- public float RotateSpeed = 2;//相机镜头转向的速度
-
- void Start()
- {
- player = GameObject.FindGameObjectWithTag("Player").transform;//查找对象
- transform.LookAt(player.position);//相机指向player
- offsetPosition = transform.position - player.position;//计算位置偏移量
- }
-
- void Update()
- {
- transform.position = offsetPosition + player.position;//更新相机位置
- Rotate();
- Scroll();
- }
-
- void Scroll()//鼠标滑轮拉近拉远视野
- {
- distance = offsetPosition.magnitude;//把偏移向量的模长赋值
- distance -= Input.GetAxis("Mouse ScrollWheel") * scrollSpeed;
- distance = Mathf.Clamp(distance, 2, 20);//限制镜头缩放最远以及最近距离
- offsetPosition = offsetPosition.normalized * distance;//更新偏移向量
- }
-
- void Rotate()//按下鼠标右键后移动鼠标更新视角
- {
- if (Input.GetMouseButtonDown(1))//按下鼠标右键
- {
- mouse1Down = true;
- }
- if (Input.GetMouseButtonUp(1))//弹起鼠标右键
- {
- mouse1Down = false;
- }
- if (mouse1Down)//设置鼠标左右移动后相机的位置变化
- {
- transform.RotateAround(player.position, player.up, RotateSpeed * Input.GetAxis("Mouse X"));//设置水平环绕旋转
-
- Vector3 originalPos = transform.position;
- Quaternion originalRotation = transform.rotation;
- transform.RotateAround(player.position, transform.right, -RotateSpeed * Input.GetAxis("Mouse Y"));//设置竖直环绕旋转
- //垂直和水平都会影响两个值
-
- float x = transform.eulerAngles.x;
-
- if (x < 10 || x > 80)//限制最大、最小俯仰角度
- {
- transform.position = originalPos;
- transform.rotation = originalRotation;
- }
- }
- offsetPosition = transform.position - player.position;
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。