Unity游戏(Assault空对地打击)开发(7) 爆炸效果

效果

准备

首先请手搓一个敌军基地。

然后添加一个火焰特效插件或者自建。

爆炸脚本编写

新建一个脚本命名为Explode。

无需挂载到对象上。

首先是全部代码。

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UIElements;public class Explode : MonoBehaviour
{private GameObject fireObj;public void ExplodeEffect(Transform t, float explodeForce, float explodeRadius, float upForce){fireObj = GameObject.Find("FireEffect");Collider[] colliders = Physics.OverlapSphere(t.position, explodeRadius / 3); // 扫描碰撞体foreach (Collider collider in colliders){Transform tr = collider.gameObject.transform;GameObject fire = Instantiate(fireObj, tr.position, Quaternion.identity);if (tr.tag == "Car")fire.transform.localScale = new Vector3(1f, 1f, 1f);else if (tr.tag == "Plane" || tr.tag == "Player")fire.transform.localScale = new Vector3(3f, 3f, 3f);elsefire.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);fire.transform.SetParent(tr.transform);}colliders = Physics.OverlapSphere(t.position, explodeRadius);foreach (Collider collider in colliders){Rigidbody rb = collider.GetComponent<Rigidbody>();if (rb != null){Vector3 explosionDirection = rb.transform.position - t.position;rb.AddExplosionForce(explodeForce, t.position, explodeRadius, upForce);}}}
}

看到一大串代码不要慌,马上解释清楚。

fireObj是火焰粒子效果的原始对象

private GameObject fireObj;

ExplodeEffect()是处理爆炸事件的函数。

Transform t:爆炸游戏对象的transform。

float explodeForce:爆炸的力度。

float explodeRadios:受影响范围的半径。

float upForce:受影响物体向上的力,通俗地说,就是“炸飞”。

public void ExplodeEffect(Transform t, float explodeForce, float explodeRadius, float upForce)

找到FireEffect,用fire表示(提前准备)

fireObj = GameObject.Find("FireEffect");

接下来是爆炸效果

第一部分:

扫描以爆炸半径1/3为半径内的所有碰撞体并存入colliders。

遍历colliders。

获取每个碰撞体所在的transform

克隆一份火,根据不同的物体标签设置不同的大小

把火的父游戏对象设置为该碰撞体所在的transform

对于不同的物体,请预先添加标签。

Collider[] colliders = Physics.OverlapSphere(t.position, explodeRadius / 3);
foreach (Collider collider in colliders)
{Transform tr = collider.gameObject.transform;GameObject fire = Instantiate(fireObj, tr.position, Quaternion.identity);if (tr.tag == "Car")fire.transform.localScale = new Vector3(1f, 1f, 1f);else if (tr.tag == "Plane" || tr.tag == "Player")fire.transform.localScale = new Vector3(3f, 3f, 3f);elsefire.transform.localScale = new Vector3(1.5f, 1.5f, 1.5f);fire.transform.SetParent(tr.transform);
}

第二部分:

扫描整个爆炸范围。

给找到的每个刚体添加爆炸力。

colliders = Physics.OverlapSphere(t.position, explodeRadius);
foreach (Collider collider in colliders)
{Rigidbody rb = collider.GetComponent<Rigidbody>();if (rb != null){Vector3 explosionDirection = rb.transform.position - t.position; // 计算力的方向rb.AddExplosionForce(explodeForce, t.position, explodeRadius, upForce);}
}

玩家生命值控制脚本编写(部分

代码不是完整的。

挂载到Player上。

using Cinemachine;
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEngine;public class PlayerLifeCtrl : MonoBehaviour
{public bool die = false;private void OnCollisionEnter(Collision Info){if (Info.gameObject.tag == "Terrain" && die == false){Camera.main.GetComponent<CinemachineBrain>().enabled = false;die = true;Explode explode = new Explode();explode.ExplodeEffect(transform, gameObject.GetComponent<FlightCtrl>().moveSpeed * 2f, gameObject.GetComponent<FlightCtrl>().moveSpeed * 0.275f, gameObject.GetComponent<FlightCtrl>().moveSpeed * 3f);transform.GetComponent<FlightCtrl>().enabled = false;transform.GetComponent<Rigidbody>().velocity = Vector3.zero;transform.GetComponent<Rigidbody>().useGravity = true;}}}

函数:当开始碰撞。

private void OnCollisionEnter(Collision Info)

如果碰到了山、地、飞机:

禁用摄像机跟随;

标记死亡;

创建一个Explode对象,进行爆炸(参数随你);

禁用飞行脚本;

速度归零;

自由落体。

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

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

相关文章

NLP面试之-激活函数

一、动机篇 1.1 为什么要有激活函数&#xff1f; 数据角度&#xff1a;由于数据是线性不可分的&#xff0c;如果采用线性化&#xff0c;那么需要复杂的线性组合去逼近问题&#xff0c;因此需要非线性变换对数据分布进行重新映射;线性模型的表达力问题&#xff1a;由于线性模型…

windows server独立部署Qwen2.5-vl-7B

服务器配置信息 CPU&#xff1a;64G GPU&#xff1a;48G&#xff08;RTX 4090&#xff09; 一、使用conda下载模型 Qwen2.5-VL-7B-Instruct conda下载 conda create --name qwen python3.11 conda activate qwen 魔塔社区下载模型 pip install modelscope modelscope downl…

2025影视泛目录站群程序设计_源码二次开发新版本无缓存刷新不变实现原理

1. 引言 本设站群程序计书旨在详细阐述苹果CMS泛目录的创新设计与实现&#xff0c;介绍无缓存刷新技术、数据统一化、局部URL控制及性能优化等核心功能&#xff0c;以提升网站访问速度和用户体验。 2. 技术概述 2.1 无缓存刷新技术 功能特点&#xff1a; 内容不变性&#x…

在大型语言模型(LLM)框架内Transformer架构与混合专家(MoE)策略的概念整合

文章目录 传统的神经网络框架存在的问题一. Transformer架构综述1.1 transformer的输入1.1.1 词向量1.1.2 位置编码&#xff08;Positional Encoding&#xff09;1.1.3 编码器与解码器结构1.1.4 多头自注意力机制 二.Transformer分步详解2.1 传统词向量存在的问题2.2 详解编解码…

win10 llamafactory模型微调相关②

微调 使用微调神器LLaMA-Factory轻松改变大语言模型的自我认知_llamafactory 自我认知-CSDN博客 【大模型微调】使用Llama Factory实现中文llama3微调_哔哩哔哩_bilibili 样本数据集 &#xff08;数据集管理脚本处需更改&#xff0c;见报错解决参考1&#xff09; 自我认知微…

从基础到人脸识别与目标检测

前言 从本文开始&#xff0c;我们将开始学习ROS机器视觉处理&#xff0c;刚开始先学习一部分外围的知识&#xff0c;为后续的人脸识别、目标跟踪和YOLOV5目标检测做准备工作。我采用的笔记本是联想拯救者游戏本&#xff0c;系统采用Ubuntu20.04&#xff0c;ROS采用noetic。 颜…

06排序 + 查找(D2_查找(D2_刷题练习))

目录 1. 二分查找-I 1.1 题目描述 1.2 解题思路 方法&#xff1a;二分法&#xff08;推荐使用&#xff09; 2. 二维数组中的查找 2.1 题目描述 2.2 解题思路 方法一&#xff1a;二分查找&#xff08;推荐使用&#xff09; 3. 寻找峰值 3.1 题目描述 3.2 解题思路 方…

防火墙综合练习2

准备阶段 实验拓扑图如下&#xff1a; 试验要求如下&#xff1a; 需求一&#xff1a;完成相关配置 需求二&#xff1a;配置DHCP协议 需求三&#xff1a;防火墙安全区域配置 需求四&#xff1a;防火墙地址组信息 需求五&#xff1a;管理员 需求六&#xff1a;用户认证…

Word中Ctrl+V粘贴报错问题

Word中CtrlV粘贴时显示“文件未找到&#xff1a;MathPage.WLL”的问题 Word的功能栏中有MathType&#xff0c;但无法使用&#xff0c;显示灰色。 解决方法如下&#xff1a; 首先找到MathType安装目录下MathPage.wll文件以及MathType Commands 2016.dotm文件&#xff0c;分别复…

什么是FPGA?

目录 一、什么是 FPGA 二、FPGA 的发展历史 三、FPGA 的基本结构 可编程逻辑单元&#xff08;CLB&#xff09; 输入输出块&#xff08;IOB&#xff09; 块随机访问存储器模块&#xff08;BRAM&#xff09; 时钟管理模块&#xff08;CMM&#xff09; 四、FPGA 的工作原理…

ESP8266配置为TCP客户端,连接电脑和手机(使用Arduino配置)

一、简介 基于 ESP8266 的 Arduino 代码&#xff0c;其主要功能是将 ESP8266 连接到指定的 Wi-Fi 网络&#xff0c;并与指定 IP 地址和端口号的服务器建立 TCP 连接。在连接成功后&#xff0c;实现了串口和网络数据的双向传输&#xff0c;也就是将从串口接收到的数据通过 Wi-Fi…

【深度学习】多目标融合算法(四):多门混合专家网络MMOE(Multi-gate Mixture-of-Experts)

目录 一、引言 二、MMoE&#xff08;Multi-gate Mixture-of-Experts&#xff0c;多门混合专家网络&#xff09; 2.1 技术原理 2.2 技术优缺点 2.3 业务代码实践 2.3.1 业务场景与建模 2.3.2 模型代码实现 2.3.3 模型训练与推理测试 2.3.4 打印模型结构 三、总结 一、…

9 数据流图

9 数据流图 9.1数据平衡原则 子图缺少处理后的数据操作结果返回前端应用以及后端数据库返回操作结果到数据管理中间件。 9.2解题技巧 实件名 存储名 加工名 数据流

Hdoop之MapReduce的原理

简单版本 AppMaster: 整个Job任务的核心协调工具 MapTask: 主要用于Map任务的执行 ReduceTask: 主要用于Reduce任务的执行 一个任务提交Job --> AppMaster(项目经理)--> 根据切片的数量统计出需要多少个MapTask任务 --> 向ResourceManager(Yarn平台的老大)索要资源 --…

Linux云计算SRE-第六周

1. 总结openssh服务安全加固和总结openssh免密认证原理&#xff0c;及免认证实现过程。 1、 openssh服务安全加固 OpenSSH&#xff08;Open Secure Shell&#xff09;服务安全加固是确保远程登录会话和其他网络服务安全性的关键步骤。以下是一些常见的OpenSSH服务安全加固措施…

Excel 笔记

实际问题记录 VBA脚本实现特殊的行转列 已知&#xff1a;位于同一Excel工作簿文件中的两个工作表&#xff1a;Sheet1、Sheet2。 问题&#xff1a;现要将Sheet2中的每一行&#xff0c;按Sheet1中的样子进行转置&#xff1a; Sheet2中每一行的黄色单元格&#xff0c;为列头。…

react使用if判断

1、第一种 function Dade(req:any){console.log(req)if(req.data.id 1){return <span>66666</span>}return <span style{{color:"red"}}>8888</span>}2、使用 {win.map((req,index) > ( <> <Dade data{req}/>{req.id 1 ?…

Java从入门到精通 第三版 读书笔记

第一章 初识Java Java同时是编译型(编译器将Java源代码静态编译为Java字节码)和解释型(JVM将Java字节码动态解释为本地机器码)语言。Java程序的运行需要解释器(如JVM)。因Java字节码本具有平台无关性,那么若要在一个新目标平台上运行一个Java程序,则仅需解释器做好目标…

【零基础学习CAPL】——Panel之弹窗的创建与使用

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 ——————————————————————————————————–—— 从0开始学习CANoe使用 从0开始学习车载测试 相信时间的力量 星光不负赶路者,时光不负有心人。 文章目录 1.概述2. panel制作2.1 panel窗体…

C# OpenCV机器视觉:对位贴合

在热闹非凡的手机维修街上&#xff0c;阿强开了一家小小的手机贴膜店。每天看着顾客们自己贴膜贴得歪歪扭扭&#xff0c;不是膜的边缘贴不整齐&#xff0c;就是里面充满了气泡&#xff0c;阿强心里就想&#xff1a;“要是我能有个自动贴膜的神器&#xff0c;那该多好啊&#xf…