【unity实战】实现蓄力丢手榴弹、烟雾弹、燃烧弹的效果

文章目录

  • 爆炸燃烧烟雾效果资产
  • 手榴弹
  • 丢手雷
  • 烟雾弹、燃烧弹
  • 实现手雷每次撞墙弹发出音效(补充)
  • 完结

爆炸燃烧烟雾效果资产

https://assetstore.unity.com/packages/vfx/particles/war-fx-5669
在这里插入图片描述

手榴弹

手榴弹配置好刚体,碰撞体
在这里插入图片描述
新增脚本Throwable,控制手榴弹爆炸

using UnityEngine;public class Throwable : MonoBehaviour
{// 可序列化字段,用于在编辑器中设置[SerializeField] float delay = 3f;[SerializeField] float damageRadius = 20f;[SerializeField] float explosionForce = 1200f;float countdown; // 倒计时bool hasExploded = false;public bool hasBeenThrown = false;// 抛出物类型枚举public enum ThrowableType{Grenade}public ThrowableType throwableType;private void Start(){countdown = delay; // 初始化倒计时}private void Update(){if (hasBeenThrown){countdown -= Time.deltaTime; // 倒计时减少}if (countdown <= 0f && !hasExploded) // 如果倒计时结束并且还没有爆炸{Explode(); // 爆炸hasExploded = true;}}private void Explode(){GetThrowableEffect(); // 获取抛出物效果//TODO:播放音效Destroy(gameObject); // 销毁抛出物对象}private void GetThrowableEffect(){switch (throwableType){case ThrowableType.Grenade: // 如果是手榴弹GrenadeEffect(); // 手榴弹效果break;}}private void GrenadeEffect(){// 获取手榴弹爆炸效果的预制体对象GameObject explosionEffect = GlobalReferences.Instance.grenadeExplosionEffect;// 在手榴弹位置实例化爆炸效果预制体对象Instantiate(explosionEffect, transform.position, transform.rotation);// 在伤害半径内获取所有的碰撞体对象Collider[] colliders = Physics.OverlapSphere(transform.position, damageRadius);// 遍历所有在伤害半径内的碰撞体对象foreach (Collider objectInRange in colliders){Rigidbody rb = objectInRange.GetComponent<Rigidbody>();if (rb != null){// 将力的爆炸效果应用于碰撞体对象rb.AddExplosionForce(explosionForce, transform.position, damageRadius);}// 还可以在此处对敌人应用伤害}}
}

丢手雷

这里按住G时,力气会越来越大,最大到2倍力,松开G丢出炸弹

using UnityEngine;public class PlayerThrowables : MonoBehaviour
{[Header("Throwables")]public int grenades = 0; // 玩家拥有的手榴弹数目public float throwForce = 10f; // 抛出物的初始速度public GameObject grenadePrefab; // 手榴弹的预制体对象public GameObject throwableSpawn; // 抛出物的发射点public float forceMultiplier = 0; // 用于计算抛出物的力度的倍数public float forceMultiplierLimit; // 抛出物的力度倍数的最大值private void Update(){// 如果按下了 G 键,增加抛出物的力度if (Input.GetKey(KeyCode.G)){forceMultiplier += Time.deltaTime;}// 如果抛出物的力度超过了最大值,将其设置为最大值if (forceMultiplier > forceMultiplierLimit){forceMultiplier = forceMultiplierLimit;}// 如果松开了 G 键,抛出抛出物if (Input.GetKeyUp(KeyCode.G)){if (grenades > 0) // 如果玩家拥有手榴弹{ThrowLethal(); // 抛出手榴弹forceMultiplier = 0; // 重置抛出物的力度}}}private void ThrowLethal(){// 获取手榴弹的预制体对象GameObject lethalPrefab = grenadePrefab;// 在抛出物的发射点实例化手榴弹对象GameObject throwable = Instantiate(lethalPrefab, throwableSpawn.transform.position, Camera.main.transform.rotation);// 获取手榴弹对象的刚体组件Rigidbody rb = throwable.GetComponent<Rigidbody>();// 计算手榴弹受到的力的大小并应用到其上rb.AddForce(Camera.main.transform.forward * (throwForce * forceMultiplier), ForceMode.Impulse);// 将已经抛出的标志设置为 truethrowable.GetComponent<Throwable>().hasBeenThrown = true;// 减少玩家拥有的手榴弹数目grenades--;// 更新 HUD 显示HUDManager.Instance.UpdateThrowables(Throwable.ThrowableType.Grenade);}
}

烟雾弹、燃烧弹

烟雾弹、燃烧弹实现和手榴弹差不多,加个类型,换个特效、声音即可

实现手雷每次撞墙弹发出音效(补充)

要实现手雷在撞击墙壁时播放音效,可以按照以下步骤进行操作:

  1. 获取碰撞事件:在手雷的脚本中,使用 OnCollisionEnter 或 OnTriggerEnter 函数来检测与墙壁的碰撞。当手雷与墙壁碰撞时,这些函数将被调用。

  2. 添加音效组件:在手雷的游戏对象上,添加一个 AudioSource 组件。这个组件将用于播放音效。

  3. 导入音效文件:将你希望用于手雷撞击墙壁音效的音频文件导入到 Unity 项目中。确保音频文件的格式与 Unity 支持的格式相匹配(如 .wav、.mp3 等)。

  4. 设置音效属性:在 AudioSource 组件中,将导入的音频文件分配给 AudioClip 属性。

  5. 播放音效:在 OnCollisionEnter 或 OnTriggerEnter 函数中,使用 GetComponent().Play() 来触发音效的播放。

下面是一个示例代码片段,演示了如何在手雷撞击墙壁时播放音效:

using UnityEngine;public class Grenade : MonoBehaviour
{public AudioClip explosionSound; // 音效文件private AudioSource audioSource;private void Start(){audioSource = GetComponent<AudioSource>();audioSource.clip = explosionSound;}private void OnCollisionEnter(Collision collision){if (collision.gameObject.CompareTag("Wall")){audioSource.Play(); // 播放音效// 其他处理逻辑...}}
}

在这个示例中,手雷游戏对象上需要有一个带有 AudioSource 和 Grenade 脚本的组件。explosionSound 变量需要在 Inspector 窗口中分配手雷撞击墙壁时播放的音效文件。

这样,在手雷与墙壁碰撞时,音效将被触发并播放。请确保手雷和墙壁都有合适的碰撞体组件,并且已打上正确的标签(如 “Wall”)。根据实际情况,你可能需要调整代码和音效文件路径来适应你的项目设置。

完结

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,以便我第一时间收到反馈,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!

好了,我是向宇,https://xiangyu.blog.csdn.net

一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/649395.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qlik Sense : Store With Retry (保存重试机制)

Background sometime you cannot store the file directly ,maybe there are another process are reading/storeing the file , so you would need to wait another proecess done and retry . then we come up this solution . 有时您不能直接存储文件&#xff0c;可能还有…

实验:eNSP AR通过telnet远程登录另外一台AR

实验2&#xff1a;eNSP AR通过telnet远程登录另外一台AR 基于实验1的基础上来进行&#xff0c;我们通过AR2220登录AR3260 首先设置远程登录密码 1、user-interface vty 0 4 进入用户的虚拟终端 2、设置密码 set authentication password cipher Huawei 这里的意思就是设置密…

数据结构(C语言版)代码实现(四)——静态单链表的部分代码实现

目录 参考材料、格式 头文件SLinkList.h 库、宏定义、函数类型声明 线性表的静态单链表存储结构 按值查找 初始化静态链表 分配空间 回收空间 打印已用链表中的元素 求集合(A-B)U(B-A)中的元素&#xff08;重点介绍&#xff09; 调试过程 修改报错与警告 调试 完整…

找不到msvcp110.dll怎么办,msvcp110.dll丢失修复方法分享

当计算机系统中无法找到msvcp110.dll这个特定的动态链接库文件时&#xff0c;可能会引发一系列运行问题和功能受限的情况。msvcp110.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows的应用程序来说&#xff0c;它是至关重要的运行组件…

vue模拟聊天页面列表:滚动到底部,滚动到顶部触发加载更多

先看下效果&#xff1a; 代码&#xff1a; <template><div><div style"text-align: center"><button click"scrollTop">滚动到顶部</button><button click"scrollBottom">滚动到底部</button></d…

Vue深入学习2—虚拟DOM和Diff算法

1、snabbdom 是什么&#xff1f; snabbdom是“速度"的意思&#xff0c;源码只有200行&#xff0c;使用TS写的&#xff0c;让东西变得模块化 2、snabbdom 的 h 函数如何工作&#xff1f; h函数用于产生虚拟节点&#xff0c;同时也可以嵌套使用&#xff0c;得到虚拟DOM树&am…

kuberneters可视化界面-kuboard

一、kuboard安装 可以选用&#xff0c;docker和docker-commpose kuberneters 安装 kuboard官网 1、 docker安装 sudo docker run -d \--restartunless-stopped \--namekuboard \-p 80:80/tcp \-p 10081:10081/tcp \-e KUBOARD_ENDPOINT"http://192.168.1.10:80" …

linux的kali安装,换源,更新包

下载kali kali.org进入官网后点第二个 然后点第一个 解压kali 下载后获得.7z压缩包&#xff0c;建议移动到合适自己电脑的位置进行解压&#xff0c;我喜欢放在D盘 启动kali 双击进入解压出的文件夹&#xff0c;将唯一一个.vmx文件用vmware打开&#xff08;没装的自行提前装…

数据结构奇妙旅程之二叉树题型解法总结

꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …

【深度学习】CodeFormer训练过程,如何训练人脸修复模型CodeFormer

文章目录 BasicSR介绍环境数据阶段 I - VQGAN阶段 II - CodeFormer (w0)阶段 III - CodeFormer (w1) 代码地址&#xff1a;https://github.com/sczhou/CodeFormer/releases/tag/v0.1.0 论文的一些简略介绍&#xff1a; https://qq742971636.blog.csdn.net/article/details/134…

链路追踪-调用链跟踪-Jaeger

文章目录 一、什么是链路跟踪二、OpenCensusOpenCensus 主要特点OpenTracing标准基本概念Span 三、典型服务端产品什么是OpenTracing?opentracing 使用介绍 四、JaegerJaeger 包含的模块Jaeger-client&#xff08;客户端库&#xff09; 五、Jaeger服务容器化部署过程问题整理 …

csdn黑色背景用法

在edge浏览器下&#xff0c;下载油猴脚本管理器 脚本下载 edge扩展 效果图如下&#xff1a;&#xff1a;&#xff1a;

[ACM学习] 进制转换

进制的本质 本质是每一位的数位上的数字乘上这一位的权重 将任意进制转换为十进制 原来还很疑惑为什么从高位开始&#xff0c;原来从高位开始的&#xff0c;可以被滚动地乘很多遍。 将十进制转换为任意进制

适合深夜发朋友圈的心灵鸡汤(整理70句)

1、很多时候&#xff0c;我们赢得了口舌&#xff0c;却失去了感情。 2、失恋到极致的时候&#xff0c;我真的会用后退来保护自己。 3、全身心地去爱&#xff0c;你可能会受到伤害&#xff0c;但这是完整人生的唯一方式。 4、自由不是想干什么就干什么&#xff0c;而是不想干…

Linux中LVM实验

LVM实验&#xff1a; 1、分区 -L是大小的意思-n名称的意思 从vg0&#xff08;卷组&#xff09;分出来 2、格式化LV逻辑卷 LVM扩容 如果icdir空间不够了&#xff0c; 扩展空间lvextend -L 5G /dev/vg0/lv1 /dev/vg0/lv1(pp,vg,lv) 刷新文件系统xfs_growfs /lvdir VG扩容 …

php:规范小数位数,例:10.00展示为10,10.98展示为10.98

代码 <?php$value 10.98; // 原始的双精度类型值if ($value floor($value)) {$formattedValue number_format($value, 0); // 10.00 转换为 10echo $formattedValue;} else {$formattedValue number_format($value, 2); // 10.98 保持为 10.98echo $formattedValue;} …

Sublime Text 3配置 Java 开发环境

《开发工具系列》 《开发语言-Java》 Sublime Text 3配置 Java 开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 初识 Java3. 接入 Java3.1 JDK 下载3.2 安装和使用 java3.3 环境变量配置 4. 配置 Java 开发环境5. 编写 Java 代码6. 编译和运行 Java 代码7. 乱码问题 三…

服务器无法访问外网怎么办

目前是互联网时代&#xff0c;网络已经成为人们日常生活中不可或缺的一部分。我们通过网络获取信息、进行沟通、甚至进行工作&#xff0c;因此&#xff0c;保持网络的稳定和通畅是非常重要的。然而&#xff0c;有时候我们可能会遇到一些网络无法访问外网的问题&#xff0c;这给…

作者推荐 | 【深入浅出MySQL】「底层原理」探秘缓冲池的核心奥秘,揭示终极洞察

探秘缓冲池的核心奥秘&#xff0c;揭示终极洞察 缓存池BufferPool机制MySQL缓冲池缓冲池缓冲池的问题 缓冲池的原理数据预读程序的局部性原则&#xff08;集中读写原理&#xff09;时间局部性空间局部性 innodb的数据页查询InnoDB的数据页InnoDB缓冲池缓存数据页InnoDB缓存数据…

[DIOR | DIOR-R]旋转目标检测数据集——基于YOLOv8obb,map50已达81.8%

DIOR是一个用于光学遥感图像目标检测的大规模基准数据集。涵盖20个对象类。这20个对象类是飞机、机场、棒球场、篮球场、桥梁、烟囱、水坝、高速公路服务区、高速公路收费站、港口、高尔夫球场、地面田径场、天桥、船舶、体育场、储罐、网球场、火车站、车辆和风磨。 1. DIOR简…