Unity分享一个简单的3D角色漫游脚本

ops/2024/9/23 2:34:29/

1.新建一个场景,并创建一脚本

2.给场景中的地面添加一个Ground标签

3.给刚刚新建的脚本编写代码

using UnityEngine;public class PlayerMovement : MonoBehaviour
{public float moveSpeed = 5f; // 移动速度public float jumpForce = 5f; // 跳跃力量public float mouseSensitivity = 100f; // 鼠标灵敏度public Transform playerBody;public Camera playerCamera;private Rigidbody rb;private bool isJumping = false;private float xRotation = 0f;private void Start(){rb = GetComponent<Rigidbody>();// 锁定鼠标Cursor.lockState = CursorLockMode.Locked;Cursor.visible = false;}private void Update(){// 获取键盘输入float horizontalInput = Input.GetAxis("Horizontal");float verticalInput = Input.GetAxis("Vertical");// 计算移动方向Vector3 movementDirection = new Vector3(horizontalInput, 0f, verticalInput).normalized;// 根据输入移动角色transform.Translate(movementDirection * moveSpeed * Time.deltaTime);// 处理跳跃if (Input.GetButtonDown("Jump") && !isJumping){rb.AddForce(Vector3.up * jumpForce, ForceMode.Impulse);isJumping = true;}// 处理视野旋转float mouseX = Input.GetAxis("Mouse X") * mouseSensitivity * Time.deltaTime;float mouseY = Input.GetAxis("Mouse Y") * mouseSensitivity * Time.deltaTime;xRotation -= mouseY;xRotation = Mathf.Clamp(xRotation, -90f, 90f);playerCamera.transform.localRotation = Quaternion.Euler(xRotation, 0f, 0f);playerBody.Rotate(Vector3.up * mouseX);}private void OnCollisionEnter(Collision collision){// 当角色碰撞到地面时if (collision.gameObject.CompareTag("Ground")){isJumping = false;}}
}

4.将脚本添加到玩家身上

5.给玩家添加刚体组件,并将玩家拖到player body这里

6.将摄像机拖到玩家的子对象中并重置摄像机的位置,并调整摄像机的位置

7.将摄像机拖到脚本中

8.运行游戏就可以实现漫游了

9.优化(如果运行时发现屏幕有点抖或者玩家容易翻身,就把玩家的旋转全部冻结就没问题了)


http://www.ppmy.cn/ops/55009.html

相关文章

Java中的Monad设计模式及其实现

Java中的Monad设计模式及其实现 在函数式编程中&#xff0c;Monad是一种重要的设计模式&#xff0c;用于处理包含隐含计算信息&#xff08;如计算顺序、环境、状态、错误处理等&#xff09;的计算。Monad提供了一种结构&#xff0c;使得可以将计算链式连接起来&#xff0c;每一…

鸿蒙学习(二)

文章目录 1、弹窗2、走马灯&#xff08;实现轮播图效果&#xff09;3、注解6、多选框、单选框7、Stack8、TextTimer9、DatePicker 1、弹窗 显示提示信息或者用于用户交互 导入模块 prompt 接口 showToast:显示toast showDialog:显示对话框 showContextMenu:显示上下文菜单 sh…

java基于微信小程序+mysql+RocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码

java基于微信小程序mysqlRocketMQ开发的医院智能问诊系统源码 智能导诊系统 智能导诊小程序源码 医院导诊系统是一种基于互联网和定位技术的智能化服务系统&#xff0c;旨在为患者提供精准、便捷的医院内部导航和医疗就诊咨询服务。该系统整合了医院的各种医疗服务资源&#x…

【计算机网络】计算机网络的分类

计算机网络的分类 导读一、按分布范围分类1.1 广域网&#xff08;WAN&#xff09;。1.2 城域网&#xff08;MAN&#xff09;1.3 局域网&#xff08;LAN&#xff09;1.4 个人区域网&#xff08;PAN&#xff09;1.5 多处理器系统 二、按传输技术分类2.1 广播式网络2.2 点对点网络…

每日一题 7月1日

1 设数组data[m]作为循环队列的存储空间,front为队头指针,rear为队尾指针,则执行出队操作后其头指针front值为____ 2 采用滑动窗口机制对两个相邻结点A(发送方)和B(接收方)的通信过程进行流量控制。假定帧的序号长度为3比特,发送窗口与接收窗口的大小均为7,当A发送了…

病理性不对称引导的渐进学习用于急性缺血性脑卒中梗死分割| 文献速递-先进深度学习疾病诊断

Title 题目 Pathological Asymmetry-Guided Progressive Learning for Acute Ischemic Stroke Infarct Segmentation 病理性不对称引导的渐进学习用于急性缺血性脑卒中梗死分割 01 文献速递介绍 中风已经成为第二大致命疾病&#xff0c;大约70%的中风是缺血性的。众所周知…

剖析DeFi交易产品之UniswapV4:添加/移除流动性

文章首发于公众号&#xff1a;Keegan小钢 前一篇文章我们已经知道了创建新池子的流程&#xff0c;那接下来就要添加流动性了。而其实&#xff0c;在 PoolManager 合约里&#xff0c;添加和移除流动性都是在同一个函数里统一处理的。当然&#xff0c;要完成添加或移除流动性的全…

Linux修炼之路之进程概念,fork函数,进程状态

目录 一&#xff1a;进程概念 二&#xff1a;Linux中的进程概念 三&#xff1a;用getpid(),getppid()获取该进程的PID,PPID 四&#xff1a;用fork()来创建子进程 五&#xff1a;操作系统学科的进程状态 六&#xff1a;Linux中的进程状态 接下来的日子会顺顺利利&#xf…