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

Unity之做一个最简单的FPS游戏demo

目录

😋FPS游戏Demo

💤1.新建FPS模板项目

⚒️2.装备枪 

💣3.设置射击功能

📺4.制造一个子弹预制体 

🎮5.发射子弹


说起来小编学Unity差不多一个月了,都是利用上班摸鱼时间学的(doge.jpg)。今天终于迎来了一直想做的FPS游戏demo。


【10分钟制作第一人称射击游戏 - Unity游戏开发】 小编是根据小破站这个教程学的,好的教程分享给大家,然后在此基础上小编还加了子弹拖尾和开火特效。


下面小编以博客的形式教大家做这个游戏demo,角色控制器是项目模板自带的,我们只需要加上枪编辑好发射子弹功能就可以了,非常简单。


😋FPS游戏Demo

💤1.新建FPS模板项目

 首先我用的Unity HUB版本是3.3,我们可以直接新建一个FPS模板项目:取好项目名创建项目。

创建好进入项目后场景模板都给我们建好了,运行项目就能发现我们通过WASD和空格键控制胶囊玩家行走和跳跃。


⚒️2.装备枪 

射击类游戏怎么能没有枪呢???我们去资源商店找一把

选了这一把枪在Unity中打开把它导进项目中来 

资源导进来后查看枪的预制件,选择一把你喜欢的颜色:


如果发现枪的预制件是紫色的我们通过下面方式来解决:

解决好材质问题后选择喜欢的枪装到玩家的摄像机(PlayerCameraRoot)上,这样控制玩家视角旋转枪也会跟着旋转。装备好枪后我们还要调整枪到合适的位置。

保存后运行就可以看到玩家拿着枪移动了。


💣3.设置射击功能

有了枪之后我们还要用它射击,先设置一下操作按键(鼠标左键):设置好后保存。

下面我们来验证射击按键有没有触发操作, 双击打开脚本文件(StarterAssetsInputs

我们使用bool类型来判断是否按下,

using UnityEngine;
#if ENABLE_INPUT_SYSTEM && STARTER_ASSETS_PACKAGES_CHECKED
using UnityEngine.InputSystem;
#endifnamespace StarterAssets
{public class StarterAssetsInputs : MonoBehaviour{[Header("Character Input Values")]public Vector2 move;public Vector2 look;public bool jump;public bool sprint;//射击public bool shoot;[Header("Movement Settings")]public bool analogMovement;[Header("Mouse Cursor Settings")]public bool cursorLocked = true;public bool cursorInputForLook = true;#if ENABLE_INPUT_SYSTEM && STARTER_ASSETS_PACKAGES_CHECKEDpublic void OnMove(InputValue value){MoveInput(value.Get<Vector2>());}public void OnLook(InputValue value){if(cursorInputForLook){LookInput(value.Get<Vector2>());}}public void OnJump(InputValue value){JumpInput(value.isPressed);}public void OnSprint(InputValue value){SprintInput(value.isPressed);}//射击public void OnShoot(InputValue value){shoot = value.isPressed;}
#endifpublic void MoveInput(Vector2 newMoveDirection){move = newMoveDirection;} public void LookInput(Vector2 newLookDirection){look = newLookDirection;}public void JumpInput(bool newJumpState){jump = newJumpState;}public void SprintInput(bool newSprintState){sprint = newSprintState;}private void OnApplicationFocus(bool hasFocus){SetCursorState(cursorLocked);}private void SetCursorState(bool newState){Cursor.lockState = newState ? CursorLockMode.Locked : CursorLockMode.None;}}}

我们来创建自己枪的脚本(Gun)并挂载到枪上,我们用来测试射击键是否生效:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using StarterAssets;public class Gun : MonoBehaviour
{private StarterAssetsInputs _input;void Start(){_input = transform.root.GetComponent<StarterAssetsInputs>();}void Update(){//判断是否按下射击键if (_input.shoot){//打印shoot!Shoot();_input.shoot = false;}}void Shoot(){Debug.Log("shoot!");}
}

运行项目点击鼠标左键查看是否生效 

📺4.制造一个子弹预制体 

新建一个球体取名为Bullet,把它缩放成子弹的形状,小编新建了一个橙黄色的材质给子弹上色,并给子弹加了刚体Rigidbody和拖尾组件TrailRenderer

注意调整拖尾的宽度、时间和颜色,有条件的也可以加上拖尾材质😋

Unity之预制体与变体 通过这个我们知道层级里的物体往项目栏下面拖就会生成预制体,我们来生成子弹预制体。

我们还要创建一个空对象(BulletPoint),把它放到枪口位置,这个空对象用来标记子弹的生成点。

🎮5.发射子弹

这里小编放上脚本(Gun)的全部代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using StarterAssets;public class Gun : MonoBehaviour
{private StarterAssetsInputs _input;//子弹预设体序列化[SerializeField]private GameObject bulletPrefab;//游戏对象子弹发射点[SerializeField]private GameObject bulletPoint;//子弹速度[SerializeField] private float bulletSpeed = 999;//特效public GameObject muzzleFlash;// Start is called before the first frame updatevoid Start(){_input = transform.root.GetComponent<StarterAssetsInputs>();}// Update is called once per framevoid Update(){//如果按下射击键执行Shoot方法if (_input.shoot){Shoot();_input.shoot = false;}}void Shoot(){Debug.Log("shoot!");//生成一个子弹实例,每点击射击一次则生成一枚子弹GameObject bullet = Instantiate(bulletPrefab, bulletPoint.transform.position, transform.rotation);//给子弹一个向前的力bullet.GetComponent<Rigidbody>().AddForce(transform.forward * bulletSpeed);//一秒后销毁子弹Destroy(bullet,1);//发射子弹的同时并播放开火特效PlayerFireEffect();}/// <summary>/// 播放开火特效/// </summary>public void PlayerFireEffect(){//启动特效muzzleFlash.SetActive(true);//0.2秒关闭Invoke("UnEffect", 0.1f);}/// <summary>/// 取消特效/// </summary>private void UnEffect(){muzzleFlash.SetActive(false);}
}

(插个眼)小编已经把开火特效预制体上传到资源了,审核通过后在这里更新链接。

链接来了:https://download.csdn.net/download/qq_48512649/88797719 

我们把开火特效(MuzzleFlash)也放到枪下边,和子弹发射点(BulletPoint)处在同一级,并把开火特效放到合适的位置。

放好后我们要取消开火特效(MuzzleFlash),因为只有我们点击开火的时候才会触发。

然后我们给脚本(Gun)装填子弹(Bullet)、子弹发射点(BulletPoint)、子弹速度(BulletSpeed)和开火特效(MuzzleFlash)。 


 小编再给加一个准星,不过这个准星可能因为子弹发射点位置的原因不是很准(doge.jpg)

新进一个图像,然后根据下图的数据设置好,还可以选择自己喜欢的颜色,这样准星就设置好了。


 点击运行项目就是本篇开头演示的效果了,当然了这只是个demo,真正的游戏还要有敌人血条等元素😃小编还要持续学习。本篇先到这里,完结撒花✿✿ヽ(°▽°)ノ✿,拜拜┏(^0^)┛ 

相关文章:

Unity之做一个最简单的FPS游戏demo

目录 &#x1f60b;FPS游戏Demo &#x1f4a4;1.新建FPS模板项目 ⚒️2.装备枪 &#x1f4a3;3.设置射击功能 &#x1f4fa;4.制造一个子弹预制体 &#x1f3ae;5.发射子弹 说起来小编学Unity差不多一个月了&#xff0c;都是利用上班摸鱼时间学的&#xff08;doge.jpg&…...

【Springboot】单元测试Junit5应用

JUnit 5是一个功能强大的测试框架&#xff0c;常用于编写和执行这些单元测试。以下是一些JUnit 5中的常用注解、断言、前置条件、嵌套测试和参数化测试的例子&#xff1a; 1.环境启动 SpringBootTest 注解&#xff1a; classes SmartApplication.class&#xff1a;这个属性…...

【INTEL(ALTERA)】内部错误:子系统:PTI,文件:/quartus/tsm/pti/pti_delay_annotator.cpp

说明 由于英特尔 Quartus Prime Pro Edition 软件 23.2 及更早版本存在问题&#xff0c;因此在编译设计的 Retime 期间可能会出现此错误。 解决方法 此问题已在英特尔 Quartus Prime Pro Edition 软件 v23.3 中修复。 要在版本 23.2 中解决此问题&#xff0c;请通过以下相应链…...

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置

上一篇&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 目录 1. &#x1f959;Idea中配置Live Templates来快速生成代码片段 2. &#x1f959;Idea中配置文件模板自定义初始代码 3.&#x1f959;设置spark-submit提交程…...

android 设置未知来源等 AppOpsManager 权限的设置接口

开始客户让我们执行下面的CMD 代码 adb shell appops set com.android.chrome REQUEST_INSTALL_PACKAGES allow 后来 GTP 告诉我有 Setmode的方法&#xff0c;后面在设置里面找到了 OP_REQUEST_INSTALL_PACKAGES 这个&#xff0c;里面有个方法mAppOpsManager.setMode(AppOp…...

使用GPT实现一个简单的网站

背景 In this exciting tutorial video, you’ll discover how to use 文心一言, a powerful language model developed by 百度, to generate ReactJS code for a simple blog website. With 文心一言’s help, you can quickly create a blog website that’s easy to custom…...

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测(SE注意力机制)

回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注意力机制&#xff09; 目录 回归预测 | Matlab实现CPO-CNN-LSTM-Attention冠豪猪优化卷积长短期记忆神经网络注意力机制多变量回归预测&#xff08;SE注…...

11:Servlet中初始化参数的获取与应用-Java Web

目录 11.1 Servlet初始化参数简介11.2 如何在Servlet中获取初始化参数11.3 基于注解的初始化参数&#xff08;Servlet 3.0&#xff09;11.4 区别总结11.5 应用场景总结 在构建Java Web应用程序时&#xff0c;Servlet是核心组件之一&#xff0c;它负责处理HTTP请求并生成响应。而…...

STM32的ADC采集传感器的模拟量数据

1、 由于项目上使用传感器采集数据&#xff0c;传感器可以输出模拟电压信号&#xff0c;但是模拟电压信号的输出范围是1-5V&#xff0c;而STM32的ADC采集电压范围是0-3.3V&#xff0c;此时可以用一个简单的分压电路将1-5V的电压将至0.5V到2.5V的范围。 2、电阻分压电路可以使用…...

opencvb 十七 使用cmake配置opencv c++项目

1、cmake简介 1.1 cmake是什么 CMake是一个开源、跨平台的编译&#xff08;Build&#xff09;工具&#xff0c;是用来构建、测试和打包软件的。它能够用简单的语句来描述所有平台的编译过程。它能够输出各种各样的makefile或者project文件&#xff0c;能测试编译器所支持的C特…...

Java8 中文指南(一)

Java8 中文指南&#xff08;一&#xff09; 文章目录 Java8 中文指南&#xff08;一&#xff09;《Java8 指南》中文翻译接口的默认方法(Default Methods for Interfaces)Lambda 表达式(Lambda expressions)函数式接口(Functional Interfaces)方法和构造函数引用(Method and Co…...

引流技术-通过文件中增加联系方式并传播

文章目录 前言文档增加联系方式扩散网盘扩散自建网站借力 注意 前言 很多人在找资料的时候可能都遇到过下图情况&#xff1a; 1、文档最后面留一个自己的联系方式&#xff1b; 2、找的一堆文件中都有相同的情况&#xff1b; 3、一段时间全网搜到的很多相同文件也有这个联系方式…...

分布式搜索引擎_学习笔记_2

分布式搜索引擎_学习笔记_2 在昨天的学习中&#xff0c;我们已经导入了大量数据到elasticsearch中&#xff0c;实现了elasticsearch的数据存储功能。但elasticsearch最擅长的还是搜索和数据分析。 所以今天&#xff0c;我们研究下elasticsearch的数据搜索功能。我们会分别使用…...

【学习笔记】树上差分总结(点差分/边差分)

一.树上差分的基本概念 1.树上差分的定义 树上差分&#xff0c;顾名思义&#xff0c;意思就是在树上做差分。 至于什么是差分呢&#xff1f;如果不会的同学&#xff0c;可以先看看我的这篇博客:一维,二维差分の详解&#xff08;简单易懂&#xff09;_一维差分-CSDN博客 2.树…...

Vue.js设计与实现(霍春阳)

Vue.js设计与实现 (霍春阳) 电子版获取链接&#xff1a;Vue.js设计与实现(霍春阳) 编辑推荐 适读人群 &#xff1a;1.对Vue.js 2/3具有上手经验&#xff0c;且希望进一步理解Vue.js框架设计原理的开发人员&#xff1b; 2.没有使用过Vue.js&#xff0c;但对Vue.js框架设计感兴趣…...

go消息队列RabbitMQ - 订阅模式-fanout

1、发布订阅 订阅模式&#xff0c;消息被路由投递给多个队列&#xff0c;一个消息被多个消费者获取。 1&#xff09; 可以有多个消费者 2&#xff09; 每个消费者有自己的queue&#xff08;队列&#xff09; 3&#xff09; 每个队列都要绑定到Exchange&#xff08;交换机&…...

科普类——5G远程实时操控技术在国内港口应用简介(十三)

在中国&#xff0c;5G远程实时操控技术已经在多个港口得到应用&#xff0c;并且应用规模不断扩大&#xff0c;展现出良好的发展前景。以下是一些具体的应用案例&#xff1a; 上港集团洋山港&#xff1a;上港集团与华为合作&#xff0c;在全球港口首次将F5G技术应用于超远程控制…...

整理:汉诺塔简析

大体上&#xff0c;要解决一个汉诺塔问题&#xff0c;就需要解决两个更简单的汉诺塔问题 以盘子数量 3 的汉诺塔问题为例 要将 3 个盘子从 A 移动到 C&#xff0c;就要&#xff1a; 将两个盘子从 A 移动到 B&#xff08;子问题 1&#xff09; 为了解决子问题 1&#xff0c;就…...

Android 8.1 设置--声音中增加通话音量

Android 8.1 设置--声音中增加通话音量 近来收到项目需求&#xff0c;想要在设置--声音中增加一项通话音量调节&#xff0c;具体修改参照如下&#xff1a; /vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml <!-- Sound: Title for the opt…...

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本

C#中使用OpenCvSharp4绘制直线、矩形、圆、文本 继之前的Python中使用Opencv-python库绘制直线、矩形、圆、文本和VC中使用OpenCV绘制直线、矩形、圆和文字&#xff0c;将之前的Python和C示例代码翻译成C#语言&#xff0c;很简单&#xff0c;还是借用OpenCvSharp4库中的Line、…...

3个关键优化:如何让Stable Diffusion模型在普通硬件上流畅运行?

3个关键优化&#xff1a;如何让Stable Diffusion模型在普通硬件上流畅运行&#xff1f; 【免费下载链接】chilloutmix_NiPrunedFp32Fix 项目地址: https://ai.gitcode.com/hf_mirrors/emilianJR/chilloutmix_NiPrunedFp32Fix 你是否曾经尝试运行Stable Diffusion模型&a…...

新手必看!圣女司幼幽-造相Z-Turbo开箱即用,3步生成精美古风人像

新手必看&#xff01;圣女司幼幽-造相Z-Turbo开箱即用&#xff0c;3步生成精美古风人像 你是不是也遇到过这样的烦恼&#xff1a;脑子里构思好了一位仙气飘飘的古风角色&#xff0c;但要么自己不会画&#xff0c;要么用普通AI工具生成的效果总差那么点意思——衣服质感像塑料&…...

RCTD实战:5步搞定单细胞与空间转录组数据整合(附避坑指南)

RCTD实战&#xff1a;5步搞定单细胞与空间转录组数据整合&#xff08;附避坑指南&#xff09; 在单细胞测序技术蓬勃发展的今天&#xff0c;空间转录组数据正成为解析组织微环境的新利器。但一个spot包含多个细胞的"混合信号"问题&#xff0c;让许多研究者对着珍贵的…...

Windows媒体播放终极解码方案:LAV Filters完整指南

Windows媒体播放终极解码方案&#xff1a;LAV Filters完整指南 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 如果你在Windows上观看视频时经常遇到格式不支…...

BigDL-2.x DLlib深度指南:用Spark DataFrames构建分布式深度学习应用

BigDL-2.x DLlib深度指南&#xff1a;用Spark DataFrames构建分布式深度学习应用 【免费下载链接】BigDL-2.x BigDL: Distributed TensorFlow, Keras and PyTorch on Apache Spark/Flink & Ray 项目地址: https://gitcode.com/gh_mirrors/bi/BigDL-2.x BigDL-2.x是一…...

Starry Night Art Gallery实战案例:小红书爆款插画AI生成流程

Starry Night Art Gallery实战案例&#xff1a;小红书爆款插画AI生成流程 1. 引言&#xff1a;当AI艺术遇上小红书爆款 如果你在小红书上刷到过那些点赞过万、充满梦幻色彩的插画作品&#xff0c;可能会好奇&#xff1a;这些画风独特、细节精美的作品&#xff0c;到底是怎么创…...

FPGA实战:从原理到代码,详解按键消抖的三种设计思路与工程优化

1. 按键消抖&#xff1a;FPGA工程师的必修课 第一次用FPGA做按键控制LED时&#xff0c;我盯着疯狂闪烁的灯陷入了沉思——明明只按了一次按键&#xff0c;为什么LED灯像抽风一样乱闪&#xff1f;这就是典型的按键抖动问题。机械按键的金属触点就像个不听话的弹簧&#xff0c;按…...

告别背包焦虑:TQVaultAE如何彻底改变《泰坦之旅》装备管理体验

告别背包焦虑&#xff1a;TQVaultAE如何彻底改变《泰坦之旅》装备管理体验 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE 对于《泰坦之旅》玩家来说&#xff0c;最令人沮丧…...

Unity 2018/2019下,Mega-Fires 3.48插件20种变形效果实测与避坑指南

Unity 2018/2019下Mega-Fires 3.48插件20种变形效果深度解析与实战避坑 在Unity 2018和2019版本中&#xff0c;Mega-Fires 3.48插件以其强大的Mesh变形能力吸引了大量开发者。这款插件提供了20种独特的变形效果&#xff0c;从基础的弯曲、扭曲到复杂的自由变形和翻页效果&#…...

Simulink AUTOSAR实战:从模型信号到RTE接口的完整映射流程解析

Simulink AUTOSAR实战&#xff1a;从模型信号到RTE接口的完整映射流程解析 在汽车电子软件开发领域&#xff0c;AUTOSAR标准已经成为行业通用架构&#xff0c;而Simulink作为模型化开发的主流工具&#xff0c;如何实现两者无缝衔接是每个汽车软件工程师必须掌握的技能。本文将带…...