unity Camera第一人称移动,3中方法实现
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Player : MonoBehaviour { public GameObject CapsulePlayer, MainCamerahead; private float aixsX, aixsY, mouseScroll; private int moveSpeed; private int standardMoveSpeed = 600; private int runMoveSpeed = 1000; private int mouseScrollSpeed = 10; private float mouseScrolbackSpeed = 0.05f; private CharacterController charaControl; private Camera charaCam; public float mouseNumOne = 0, mouseNumTwo = 0; public static bool chufa = false; void Awake() { charaControl = GetComponent<CharacterController>(); charaCam = MainCamerahead.GetComponent<Camera>(); } void Update() { aixsX = Input.GetAxis("Horizontal"); aixsY = Input.GetAxis("Vertical"); mouseScroll = Input.GetAxis("Mouse ScrollWheel"); if (Input.GetKey(KeyCode.LeftShift)) { moveSpeed = runMoveSpeed; } else { moveSpeed = standardMoveSpeed; } charaControl.SimpleMove(transform.forward * moveSpeed * aixsY * 0.02f + transform.right * moveSpeed * aixsX * 0.02f); /* ***********************镜头跟随鼠标移动的第一种方法********************** float mousex = Input.GetAxis("Mouse X") * 2f; float mousey = Input.GetAxis("Mouse Y") * 2f; if (mousex > 180) { mousex = 180; } else if (mousex < -180) { mousex = -180; } if (Mathf.Abs(mousey) < 120f) { MainCamerahead.transform.localRotation = charaCam.transform.localRotation * Quaternion.Euler(-mousey, 0, 0); CapsulePlayer.transform.localRotation = transform.localRotation * Quaternion.Euler(0, mousex, 0); } */ //镜头跟随鼠标移动的第二种写法 (总之写法有很多,自己用着舒服就行) if (chufa ) { mouseNumOne += Input.GetAxis("Mouse Y"); mouseNumTwo += Input.GetAxis("Mouse X"); if (mouseNumOne > 180) { mouseNumOne = 180; } else if (mouseNumOne < -180) { mouseNumOne = -180; } if (Mathf.Abs(mouseNumOne) < 90f) { MainCamerahead.transform.Rotate(new Vector3(-1 * Input.GetAxis("Mouse Y"), 0, 0)); CapsulePlayer.transform.Rotate(0, 1.6f * Input.GetAxis("Mouse X"), 0); } } else { //鼠标滑动镜头跟着滑动 if (Input.GetMouseButton(0)) { mouseNumOne += Input.GetAxis("Mouse Y"); mouseNumTwo += Input.GetAxis("Mouse X"); if (mouseNumOne > 180) { mouseNumOne = 180; } else if (mouseNumOne < -180) { mouseNumOne = -180; } if (Mathf.Abs(mouseNumOne) < 90f) { MainCamerahead.transform.Rotate(new Vector3(-1 * Input.GetAxis("Mouse Y"), 0, 0)); CapsulePlayer.transform.Rotate(0, 1.6f * Input.GetAxis("Mouse X"), 0); } } } //放大缩小功能 if (charaCam.fieldOfView > 60) { charaCam.fieldOfView -= mouseScrolbackSpeed; } else if (charaCam.fieldOfView < 10) { charaCam.fieldOfView += mouseScrolbackSpeed; } else { charaCam.fieldOfView -= mouseScroll * mouseScrollSpeed; } } }
Demo链接:https://pan.baidu.com/s/1s8At3pMXI94-6Ri14_JvPw
提取码:1cbw
代码写的不好,大家多多包涵。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器