unity

您所在的位置:网站首页 unity控制物体移动旋转 unity

unity

2023-07-09 23:52| 来源: 网络整理| 查看: 265

本菜鸟为了实现第三人称视角摄像机的主要功能,踩了很多意料之外的坑,终于搞出一份自觉完美的脚本,分享一下。

功能:摄像机跟随、鼠标滚轮缩放视野、长按鼠标右键左右旋转视野、长按鼠标中键上下旋转视野。

此脚本挂接在摄像机上,有详细注释,可直接运行。

public GameObject target;//目标物体 Vector3 offset;//相机跟随的偏移量 void Start() { //保证摄像机看向目标物体,且z轴旋转度是0 transform.LookAt(target.transform.position); transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, 0); //得到摄像机与物体之间的初始偏移量 offset = target.transform.position - transform.position; } void LateUpdate() { Rotate(); Rollup(); Follow(); } //摄像机跟随、滚轮缩放功能: public float zoomSpeed = 1f; // 视野的缩放速度 float zoom;//滚轮滚动量 void Follow() { //视野缩放 zoom = Input.GetAxis("Mouse ScrollWheel") * zoomSpeed; // 获取滚轮滚动量 if (zoom != 0) // 如果有滚动 { offset -= zoom * offset; } //镜头跟随 transform.position = target.transform.position - offset; } //左右旋转、上下旋转功能: public float rotationSpeed = 500f;//摄像机旋转速度 private bool isRotating, lookup = false; float mousex, mousey; void Rotate() { if (Input.GetMouseButtonDown(1))//长按鼠标右键 { isRotating = true; } if (Input.GetMouseButtonUp(1)) { isRotating = false; } if (isRotating) { //得到鼠标x方向移动距离 mousex = Input.GetAxis("Mouse X") * rotationSpeed * Time.deltaTime; //旋转轴的位置是目标物体处,方向是世界坐标系的y轴 transform.RotateAround(target.transform.position, Vector3.up, mousex); //每次旋转后更新偏移量 offset = target.transform.position - transform.position; } } void Rollup() { if (Input.GetMouseButtonDown(2))//长按鼠标中键 { lookup = true; } if (Input.GetMouseButtonUp(2)) { lookup = false; } if (lookup) { //得到鼠标y方向移动距离 mousey = Input.GetAxis("Mouse Y") * rotationSpeed * Time.deltaTime; //旋转轴的位置在目标物体处,方向是摄像机的x轴 transform.RotateAround(target.transform.position, transform.right, mousey); //每次旋转后更新偏移量 offset = target.transform.position - transform.position; } }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3