当前位置: 首页 > news >正文

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)简单场景、玩家移动控制

前言&#xff1a;上一篇的时候&#xff0c;我们已经导入了官方fps的素材&#xff0c;并且对三维模型有了一定了解。接下来我们要构建一个简单的场景让玩家能够有地方移动&#xff0c;然后写一个简单的玩家移动控制。 简单场景和玩家移动 简单场景玩家移动控制玩家模型视野-摄像…...

网上的 AQS 文章让我很失望

一、AQS 很多人都没有讲明白 &#x1f914; 翻看了网上的 AQS&#xff08;AbstractQueuedSynchronizer&#xff09;文章&#xff0c;质量参差不齐&#xff0c;大多数都是在关键处跳过、含糊其词&#xff0c;美其名曰 “传播知识” 。 大多数都是进行大段的源码粘贴和注释&…...

滑动窗口子串

文章目录 滑动窗口一、无重复字符的最长子串二、找到字符串中所有字母异位词 子串三、和为 K 的子数组四、滑动窗口最大值五、最小覆盖子串 滑动窗口 一、无重复字符的最长子串 题目链接 &#xff08;方法一&#xff1a;暴力枚举&#xff09; &#xff08;方法二&#xff…...

【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|哈希表、动态规划】最长连续序列、最大子数组和

目录 最长连续序列 解法一&#xff1a;暴力枚举 复杂度 解法二&#xff1a;优化解法一省去二层循环中不必要的遍历 复杂度 最大子数组和 解法一&#xff1a;暴力枚举 复杂度 解法二&#xff1a;贪心 复杂度 解法三&#xff1a;动态规划 复杂度 最长连续序列 输入输…...

【人工智能】掌握深度学习中的时间序列预测:深入解析RNN与LSTM的工作原理与应用

深度学习中的循环神经网络&#xff08;RNN&#xff09;和长短时记忆网络&#xff08;LSTM&#xff09;在处理时间序列数据方面具有重要作用。它们能够通过记忆前序信息&#xff0c;捕捉序列数据中的长期依赖性&#xff0c;广泛应用于金融市场预测、自然语言处理、语音识别等领域…...

今日开放!24下软考机考「模拟练习平台」操作指南来啦!

2024年下半年软考机考模拟练习平台今日开放&#xff0c;考生可以下载模拟作答系统并登录后进行模拟练习&#xff0c;熟悉答题流程及操作方法。 一、模拟练习时间 2024年下半年软考机考模拟练习平台开放时间为2024年10月23日9:00至11月6日17:00&#xff0c;共15天。 考生可以在…...

合并.md文档

需求&#xff1a;将多个.md文档合并成一个.md文档。 方法一&#xff1a;通过 type 命令 参考内容&#xff1a;多个md文件合并 步骤&#xff1a; 把需要合并的 .md 文档放入到一个文件夹内。修改需要合并的 .md 文档名&#xff0c;可以在文档名前加上 1.2.3 来表明顺序&#x…...

10月18日笔记(基于系统服务的权限提升)

系统内核漏洞提权 当目标系统存在该漏洞且没有更新安全补丁时&#xff0c;利用已知的系统内核漏洞进行提权&#xff0c;测试人员往往可以获得系统级别的访问权限。 查找系统潜在漏洞 手动寻找可用漏洞 在目标主机上执行以下命令&#xff0c;查看已安装的系统补丁。 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…...

监督学习、无监督学习、半监督学习、强化学习、迁移学习、集成学习分别是什么对应什么应用场景

将对监督学习、无监督学习、半监督学习、强化学习、迁移学习和集成学习进行全面而详细的解释&#xff0c;包括定义、应用场景以及具体的算法/模型示例。 1. 监督学习 (Supervised Learning) 定义&#xff1a;监督学习是一种机器学习方法&#xff0c;其中模型通过已知的输入数…...

WSL2 Linux子系统调整存储位置

WSL2 默认不支持修改Linux 安装路径&#xff0c;官方提供的方式&#xff0c;只有通过导出、导入的方式实现Linux子系统的迁移。 修改注册表的方式官方不推荐&#xff0c;没有尝试过&#xff0c;仅提供操作方式(自行评估风险&#xff0c;建议备份好数据) 1. 打开 **注册表编辑器…...

Shiro授权

一、定义与作用 授权&#xff08;Authorization&#xff09;&#xff0c;也称为访问控制&#xff0c;是确定是否允许用户/主体做某事的过程。在Shiro安全框架中&#xff0c;授权是核心组件之一&#xff0c;它负责控制用户对系统资源的访问权限&#xff0c;确保用户只能访问其被…...

算法题总结(十五)——贪心算法(下)

1005、K 次取反后最大化的数组和 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数组&#xff1a; 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。 以这种方式修改数组后&#xff0c;返回数组 可…...

《深度学习》【项目】自然语言处理——情感分析 <下>

目录 一、了解项目 1、任务 2、文件内容 二、续接上篇内容 1、打包数据&#xff0c;转化Tensor类型 2、定义模型&#xff0c;前向传播函数 3、定义训练、测试函数 4、最终文件格式 5、定义主函数 运行结果&#xff1a; 一、了解项目 1、任务 对微博评论信息的情感分…...

postgresql是国产数据库吗?

PostgreSQL不是国产数据库。但是PostgreSQL对国产数据库的发展有着重要影响&#xff0c;许多国产数据库产品是基于PostgreSQL进行二次开发的。 PostgreSQL的开源特性也是其受欢迎的重要原因之一。开源意味着任何人都可以查看、修改和使用PostgreSQL的源代码。这使得PostgreSQL…...

软考——计算机网络概论

文章目录 &#x1f550;计算机网络分类1️⃣通信子网和资源子网2️⃣网络拓扑结构3️⃣ 计算机网络分类3&#xff1a;LAN MAN WAN4️⃣其他分类方式 &#x1f551;OSI 和 TCP/IP 参考模型1️⃣OSI2️⃣TCP/IP&#x1f534;TCP/IP 参考模型对应协议 3️⃣OSI 和 TCP/IP 模型对应…...

01 设计模式-创造型模式-工厂模式

工厂模式&#xff08;Factory Pattern&#xff09;是 Java 中最常用的设计模式之一&#xff0c;它提供了一种创建对象的方式&#xff0c;使得创建对象的过程与使用对象的过程分离。 工厂模式提供了一种创建对象的方式&#xff0c;而无需指定要创建的具体类。 通过使用工厂模式…...

ComnandLineRunner接口, ApplcationRunner接口

ComnandLineRunner接口, ApplcationRunner接口 介绍&#xff1a; 这两个接口都有一个run方法&#xff0c;执行时间在容器对象创建好后&#xff0c;自动执行run ( )方法。 创建容器的同时会创建容器中的对象&#xff0c;同时会把容器中的对象的属性赋上值&#xff1a; 举例&…...

Swift用于将String拆分为数组的components与split的区别

根据特定分隔符拆分字符串 在 Swift 中&#xff0c;components(separatedBy:) 和 split(separator:) 都可以用于将字符串拆分为数组&#xff0c;但它们有一些关键区别。下面将从返回值类型、性能和功能等角度进行对比。 1. 返回值类型 components(separatedBy:)&#xff1a;…...

如何用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. 项目概述与核心价值 最近在折腾个人知识库和技能树管理&#xff0c;发现了一个挺有意思的开源项目 rootcastleco/rei-skills 。这项目名字乍一看有点神秘&#xff0c; rei 在日语里是“零”或“灵”的意思&#xff0c;结合 skills &#xff0c;我理解它想表达的是一种…...

ExifToolGUI终极指南:3步掌握照片元数据批量管理工具

ExifToolGUI终极指南&#xff1a;3步掌握照片元数据批量管理工具 【免费下载链接】ExifToolGui A GUI for ExifTool 项目地址: https://gitcode.com/gh_mirrors/ex/ExifToolGui 你是否曾为整理数百张旅行照片而头疼&#xff1f;需要统一修改拍摄时间、批量添加版权信息&…...

PC显示器HDR选购指南:DisplayHDR标准详解与实战应用

1. 从混乱到清晰&#xff1a;PC显示器HDR标准的演进与现状如果你最近在挑选一台新的PC显示器&#xff0c;尤其是为了游戏、影音剪辑或者专业设计&#xff0c;那么“HDR”这个标签你一定绕不开。它被印在包装盒上&#xff0c;出现在电商页面的标题里&#xff0c;是销售员口中的“…...

艾尔登法环风灵月影修改器下载(已汉化)分享2026最新版

《艾尔登法环》以交界地为舞台&#xff0c;打造了一款兼具开放世界探索与高难度挑战的角色扮演游戏。玩家将扮演褪色者&#xff0c;在破碎的土地上冒险&#xff0c;挑战强大敌人、收集装备、提升能力&#xff0c;最终成为艾尔登之王。游戏以硬核战斗与开放探索为核心&#xff0…...

游戏模组管理革命:XXMI启动器如何改变你的游戏体验

游戏模组管理革命&#xff1a;XXMI启动器如何改变你的游戏体验 【免费下载链接】XXMI-Launcher Modding platform for GI, HSR, WW and ZZZ 项目地址: https://gitcode.com/gh_mirrors/xx/XXMI-Launcher 在当今的游戏模组生态中&#xff0c;玩家们面临着诸多挑战&#x…...

Meshroom终极指南:免费开源3D重建软件,从照片到三维模型的完整解决方案 [特殊字符]

Meshroom终极指南&#xff1a;免费开源3D重建软件&#xff0c;从照片到三维模型的完整解决方案 &#x1f680; 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom Meshroom是一款革命性的开源3D重…...

基于多智能体架构的AI股票分析系统PRISM-INSIGHT部署与实战

1. 项目概述&#xff1a;一个由13个AI智能体驱动的股票分析与交易系统如果你对AI如何应用于金融投资感兴趣&#xff0c;或者正在寻找一个能自动分析市场、生成专业报告甚至执行交易的开源工具&#xff0c;那么PRISM-INSIGHT值得你花时间深入了解。这不是一个简单的数据可视化工…...

Docker 学习笔记:镜像分发、容器运行与资源限制

Docker 学习笔记&#xff1a;镜像分发、容器运行与资源限制本笔记续接上一部分&#xff0c;涵盖镜像命名与分发、容器的核心操作、底层技术&#xff08;cgroup/namespace&#xff09;以及 CPU/内存资源限制。所有案例代码均经验证&#xff0c;直接可用。8. 镜像命名与分发最佳实…...

告别天书:用Python+NumPy手把手实现Turbo码的迭代译码(附完整代码)

告别天书&#xff1a;用PythonNumPy手把手实现Turbo码的迭代译码&#xff08;附完整代码&#xff09; 在通信系统的演进历程中&#xff0c;Turbo码的出现犹如一场静默的革命。1993年&#xff0c;当Berrou等人首次公开这项技术时&#xff0c;其接近香农极限的性能让整个学术界为…...