Unity3D学习FPS游戏(2)简单场景、玩家移动控制
前言:上一篇的时候,我们已经导入了官方fps的素材,并且对三维模型有了一定了解。接下来我们要构建一个简单的场景让玩家能够有地方移动,然后写一个简单的玩家移动控制。
简单场景和玩家移动
- 简单场景
- 玩家移动控制
- 玩家模型
- 视野-摄像机挂载
- 武器-武器挂载和材质
- 玩家控制-CharacterController
- 玩家控制-移动脚本
- 运行效果
- 补充知识
- 时间增量
- 按键输入
简单场景
如果没有素材的时候,我们可以右键添加Plane,但是这种地图没有什么设计感,没有材质贴图啥的。
我们可以从素材中找到地图预制体,搜索Floor,就会看到很多Floor地板场景素材,我选了Floor9×9。


玩家移动控制
玩家模型
回到官方fps游戏演示中,玩家第一人称其实是没有模型的,只显示了武器。但是有一些fps游戏中会有模型,就是会只显示手的模型,只不过在官方fps素材中没有。
所以我们玩家并不需要拉一个模型进来。
先创建一个空的GameObject命名为玩家。
视野-摄像机挂载
视野其实就是主摄像机看到的内容,要和玩家的移动同步,所以主摄像机应该挂载在玩家的节点下面。

挂载后,视野就会随着Player移动和转向。
武器-武器挂载和材质
武器也要挂载在玩家的节点下,因为武器也会跟随玩家一起移动,在Player下面新建Weapon空GameObject,用来后续挂载武器预制体。

武器的素材在fps官方素材包都有,可以在以下路径找到武器模型。

把其中一个模型放入到Weapon节点下面,然后右键prefabs-unpack一下,免得操作影响到素材本身的预制体。

可以发现武器是没有材质的,去素材找到对应贴图“WeaponPistol”,绑定到模型中。全选左边所有的GameObject,然后拖拽材质到右边的Element0中。

调整Weapon节点位置,让武器出现在主视角中比较合理的部分。

玩家控制-CharacterController
首先先为我们玩家控制选择合适的方式
玩家控制常用有三种方式,分别是Tranform Translate、Rigid Body+Capsule和CharacterController。
Tranform Translate就是调整物体位置属性,可以随便移动,但是不会产生碰撞。会鬼穿墙,不适合我们游戏的需求,因为fps不能穿墙。
Rigid Body+Capsule符合物理学,可以和Physics Object交互。但是物体之间会有物理碰撞,施加力的作用,就是玩家可以撞开敌人,这个也不太复合我的需求。
CharacterController可以有碰撞,但是不会力的作用,无法和Physics Object交互,提供了大量API。
符合我们fps操作需求。
添加和调整CharacterController组件
为Player添加CharacterController组件。
调整CharacterController胶囊碰撞体,调整到自己认为合适。

玩家控制-移动脚本
添加和编写脚本
在自己项目代码文件夹下,新建一个C#文件,命名为PlayerController,并挂载到Player中。

打开PlayerController代码,会默认生成两个函数Start和Update,Start可以用来放一些初始化的数据,只会在开始调用一次,Update则是每帧都会调用。
先从简单的控制功能开始,让角色能够跟着键盘输入,进行前后左右的移动。
代码思路很简单,先获取CharacterController组件和键盘输入,通过键盘数据来调用CharacterController组件的API控制角色移动。
具体代码如下:
public class PlayerController : MonoBehaviour
{public CharacterController m_Controller;public float speed = 6.0F;void Start(){m_Controller = this.GetComponent<CharacterController>();}void Update(){PlayerMovement();}// 控制角色移动public void PlayerMovement(){// CharacertController的Move函数需要输入一个三维的向量// 每个分量表示三维不同方向前进多少Vector3 moveDirection = Vector3.zero;// 获取键盘输入// Horizontal左右移动;Vertical前后移动moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));m_Controller.Move(moveDirection * Time.deltaTime*speed);}
}
把CharacterController组件拖拽到控制代码组件中。

运行效果

补充知识
代码思路虽然说的很清楚,但是有一些小细节,可能会有些不懂,补充一些相关知识能理解的更加透彻。
时间增量
会发现玩家控制代码中,移动的距离乘上了deltaTime(时间增量)。
这是因为Update更新是每帧更新一次。
假设说我们帧率是60fps,每次时间增量就是1/60 秒。
游戏设定按下按键后,1秒移动10米,那么每帧刷新的时候距离就要乘上1/60 ,也就是时间增量。
可以确保不同帧率下,速度一致。
按键输入
不同键盘输入的获取,可以通过菜单-Edit-Project Settings查看。
左右对应的是“Horizontal”,前后对应的是“Vertical”。
也可以修改对应键位。

相关文章:
Unity3D学习FPS游戏(2)简单场景、玩家移动控制
前言:上一篇的时候,我们已经导入了官方fps的素材,并且对三维模型有了一定了解。接下来我们要构建一个简单的场景让玩家能够有地方移动,然后写一个简单的玩家移动控制。 简单场景和玩家移动 简单场景玩家移动控制玩家模型视野-摄像…...
网上的 AQS 文章让我很失望
一、AQS 很多人都没有讲明白 🤔 翻看了网上的 AQS(AbstractQueuedSynchronizer)文章,质量参差不齐,大多数都是在关键处跳过、含糊其词,美其名曰 “传播知识” 。 大多数都是进行大段的源码粘贴和注释&…...
滑动窗口子串
文章目录 滑动窗口一、无重复字符的最长子串二、找到字符串中所有字母异位词 子串三、和为 K 的子数组四、滑动窗口最大值五、最小覆盖子串 滑动窗口 一、无重复字符的最长子串 题目链接 (方法一:暴力枚举) (方法二ÿ…...
【windows11 提示“Microsoft Visual C++ Runtime Library Runtime Error】
windows11 提示“Microsoft Visual C++ Runtime Library Runtime Error” 问题描述解决方法郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: windows OS:windows11 问题描述 解决方法 下载VisualCppRedist_AIO_x86_x64.exe 安…...
【leetcode|哈希表、动态规划】最长连续序列、最大子数组和
目录 最长连续序列 解法一:暴力枚举 复杂度 解法二:优化解法一省去二层循环中不必要的遍历 复杂度 最大子数组和 解法一:暴力枚举 复杂度 解法二:贪心 复杂度 解法三:动态规划 复杂度 最长连续序列 输入输…...
【人工智能】掌握深度学习中的时间序列预测:深入解析RNN与LSTM的工作原理与应用
深度学习中的循环神经网络(RNN)和长短时记忆网络(LSTM)在处理时间序列数据方面具有重要作用。它们能够通过记忆前序信息,捕捉序列数据中的长期依赖性,广泛应用于金融市场预测、自然语言处理、语音识别等领域…...
今日开放!24下软考机考「模拟练习平台」操作指南来啦!
2024年下半年软考机考模拟练习平台今日开放,考生可以下载模拟作答系统并登录后进行模拟练习,熟悉答题流程及操作方法。 一、模拟练习时间 2024年下半年软考机考模拟练习平台开放时间为2024年10月23日9:00至11月6日17:00,共15天。 考生可以在…...
合并.md文档
需求:将多个.md文档合并成一个.md文档。 方法一:通过 type 命令 参考内容:多个md文件合并 步骤: 把需要合并的 .md 文档放入到一个文件夹内。修改需要合并的 .md 文档名,可以在文档名前加上 1.2.3 来表明顺序&#x…...
10月18日笔记(基于系统服务的权限提升)
系统内核漏洞提权 当目标系统存在该漏洞且没有更新安全补丁时,利用已知的系统内核漏洞进行提权,测试人员往往可以获得系统级别的访问权限。 查找系统潜在漏洞 手动寻找可用漏洞 在目标主机上执行以下命令,查看已安装的系统补丁。 system…...
【STM32 Blue Pill编程实例】-控制步进电机(ULN2003+28BYJ-48)
控制步进电机(ULN2003+28BYJ-48) 文章目录 控制步进电机(ULN2003+28BYJ-48)1、步进电机介绍2、ULN2003步进电机驱动模块3、硬件准备及接线4、模块配置3.1 定时器配置3.2 ULN2003输入引脚配置4、代码实现在本文中,我们将介使用 STM32Cube IDE 使用 ULN2003 电机驱动器来控制28B…...
监督学习、无监督学习、半监督学习、强化学习、迁移学习、集成学习分别是什么对应什么应用场景
将对监督学习、无监督学习、半监督学习、强化学习、迁移学习和集成学习进行全面而详细的解释,包括定义、应用场景以及具体的算法/模型示例。 1. 监督学习 (Supervised Learning) 定义:监督学习是一种机器学习方法,其中模型通过已知的输入数…...
WSL2 Linux子系统调整存储位置
WSL2 默认不支持修改Linux 安装路径,官方提供的方式,只有通过导出、导入的方式实现Linux子系统的迁移。 修改注册表的方式官方不推荐,没有尝试过,仅提供操作方式(自行评估风险,建议备份好数据) 1. 打开 **注册表编辑器…...
Shiro授权
一、定义与作用 授权(Authorization),也称为访问控制,是确定是否允许用户/主体做某事的过程。在Shiro安全框架中,授权是核心组件之一,它负责控制用户对系统资源的访问权限,确保用户只能访问其被…...
算法题总结(十五)——贪心算法(下)
1005、K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k ,按以下方法修改该数组: 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后,返回数组 可…...
《深度学习》【项目】自然语言处理——情感分析 <下>
目录 一、了解项目 1、任务 2、文件内容 二、续接上篇内容 1、打包数据,转化Tensor类型 2、定义模型,前向传播函数 3、定义训练、测试函数 4、最终文件格式 5、定义主函数 运行结果: 一、了解项目 1、任务 对微博评论信息的情感分…...
postgresql是国产数据库吗?
PostgreSQL不是国产数据库。但是PostgreSQL对国产数据库的发展有着重要影响,许多国产数据库产品是基于PostgreSQL进行二次开发的。 PostgreSQL的开源特性也是其受欢迎的重要原因之一。开源意味着任何人都可以查看、修改和使用PostgreSQL的源代码。这使得PostgreSQL…...
软考——计算机网络概论
文章目录 🕐计算机网络分类1️⃣通信子网和资源子网2️⃣网络拓扑结构3️⃣ 计算机网络分类3:LAN MAN WAN4️⃣其他分类方式 🕑OSI 和 TCP/IP 参考模型1️⃣OSI2️⃣TCP/IP🔴TCP/IP 参考模型对应协议 3️⃣OSI 和 TCP/IP 模型对应…...
01 设计模式-创造型模式-工厂模式
工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一,它提供了一种创建对象的方式,使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式,而无需指定要创建的具体类。 通过使用工厂模式…...
ComnandLineRunner接口, ApplcationRunner接口
ComnandLineRunner接口, ApplcationRunner接口 介绍: 这两个接口都有一个run方法,执行时间在容器对象创建好后,自动执行run ( )方法。 创建容器的同时会创建容器中的对象,同时会把容器中的对象的属性赋上值: 举例&…...
Swift用于将String拆分为数组的components与split的区别
根据特定分隔符拆分字符串 在 Swift 中,components(separatedBy:) 和 split(separator:) 都可以用于将字符串拆分为数组,但它们有一些关键区别。下面将从返回值类型、性能和功能等角度进行对比。 1. 返回值类型 components(separatedBy:):…...
如何用FanControl终极解决Windows风扇噪音与散热难题
如何用FanControl终极解决Windows风扇噪音与散热难题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanControl.…...
开源技能管理工具rei-skills:从零构建个人技术能力图谱
1. 项目概述与核心价值 最近在折腾个人知识库和技能树管理,发现了一个挺有意思的开源项目 rootcastleco/rei-skills 。这项目名字乍一看有点神秘, rei 在日语里是“零”或“灵”的意思,结合 skills ,我理解它想表达的是一种…...
ExifToolGUI终极指南:3步掌握照片元数据批量管理工具
ExifToolGUI终极指南:3步掌握照片元数据批量管理工具 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾为整理数百张旅行照片而头疼?需要统一修改拍摄时间、批量添加版权信息&…...
PC显示器HDR选购指南:DisplayHDR标准详解与实战应用
1. 从混乱到清晰:PC显示器HDR标准的演进与现状如果你最近在挑选一台新的PC显示器,尤其是为了游戏、影音剪辑或者专业设计,那么“HDR”这个标签你一定绕不开。它被印在包装盒上,出现在电商页面的标题里,是销售员口中的“…...
艾尔登法环风灵月影修改器下载(已汉化)分享2026最新版
《艾尔登法环》以交界地为舞台,打造了一款兼具开放世界探索与高难度挑战的角色扮演游戏。玩家将扮演褪色者,在破碎的土地上冒险,挑战强大敌人、收集装备、提升能力,最终成为艾尔登之王。游戏以硬核战斗与开放探索为核心࿰…...
游戏模组管理革命:XXMI启动器如何改变你的游戏体验
游戏模组管理革命:XXMI启动器如何改变你的游戏体验 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 在当今的游戏模组生态中,玩家们面临着诸多挑战&#x…...
Meshroom终极指南:免费开源3D重建软件,从照片到三维模型的完整解决方案 [特殊字符]
Meshroom终极指南:免费开源3D重建软件,从照片到三维模型的完整解决方案 🚀 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom Meshroom是一款革命性的开源3D重…...
基于多智能体架构的AI股票分析系统PRISM-INSIGHT部署与实战
1. 项目概述:一个由13个AI智能体驱动的股票分析与交易系统如果你对AI如何应用于金融投资感兴趣,或者正在寻找一个能自动分析市场、生成专业报告甚至执行交易的开源工具,那么PRISM-INSIGHT值得你花时间深入了解。这不是一个简单的数据可视化工…...
Docker 学习笔记:镜像分发、容器运行与资源限制
Docker 学习笔记:镜像分发、容器运行与资源限制本笔记续接上一部分,涵盖镜像命名与分发、容器的核心操作、底层技术(cgroup/namespace)以及 CPU/内存资源限制。所有案例代码均经验证,直接可用。8. 镜像命名与分发最佳实…...
告别天书:用Python+NumPy手把手实现Turbo码的迭代译码(附完整代码)
告别天书:用PythonNumPy手把手实现Turbo码的迭代译码(附完整代码) 在通信系统的演进历程中,Turbo码的出现犹如一场静默的革命。1993年,当Berrou等人首次公开这项技术时,其接近香农极限的性能让整个学术界为…...
