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;由于线性模型…

Leetcode面试经典150题刷题记录 —— 二分查找篇

Leetcode面试经典150题刷题记录-系列Leetcod面试经典150题刷题记录——数组 / 字符串篇Leetcod面试经典150题刷题记录 —— 双指针篇Leetcod面试经典150题刷题记录 —— 矩阵篇Leetcod面试经典150题刷题记录 —— 滑动窗口篇Leetcod面试经典150题刷题记录 —— 哈希表篇Leetcod…

Vue 和 dhtmlx-gantt 实现图表构建动态多级甘特图效果 ,横坐标为动态刻度不是日期

注意事项:1、横坐标根据日期转换成时间刻度在( gantt.config.scales);2、获取时间刻度的最大值(findMaxRepairTime);3、甘特图多级列表需注意二级三级每个父子id需要唯一(convertData) 安装依赖 npm install dhtmlx-gantt --save 在当前页引入和配置 dhtmlx-gantt im…

如何避免大语言模型中涉及丢番图方程的问题

希尔伯特第十问题是一个著名的数学问题,涉及不定方程(又称为丢番图方程)的可解答性。然而在大模型中,我们希望问题都是确定的可解的,或者说要尽可能的想办法避免不确定的不可解问题。由于丢番图方程问题是不可判定问题(即不存在一个有效的算法能够解决该类问题的所有实例…

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 详解编解码…

WiFi配网流程—SmartConfig 配网流程

目录 &#x1f4cc; SmartConfig 配网流程 &#x1f449; 阶段 1&#xff1a;设备进入配网模式 &#x1f449; 阶段 2&#xff1a;手机 App 发送 Wi-Fi 配置信息 &#x1f449; 阶段 3&#xff1a;设备解析 Wi-Fi 配置&#xff0c;连接家庭网络 &#x1f449; 阶段 4&…

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。 颜…

TCP长连接、HTTP短轮询、HTTP长轮询、HTTP长连接、WebSocket的区别

1.TCP长连接 &#xff08;1&#xff09;概念&#xff1a;该连接属于传输层的协议。客户端和服务器之间建立连接后&#xff0c;不立即断开该连接&#xff0c;而是一直保持这个状态&#xff0c;以便后续数据的持续、连续传输。&#xff08;2&#xff09;应用场景&#xff1a;适合…

【Linux Oracle】杂货铺 日常实用2024

1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…

索引失效的14种常见场景

在 MySQL 中&#xff0c;索引有时可能会失效&#xff0c;导致查询性能下降。以下是常见的 14 种场景&#xff0c;在这些场景下&#xff0c;索引可能会失效 1. 使用 OR 连接多个条件 场景: 当查询中包含 OR 时&#xff0c;如果 OR 连接的多个条件中有一个没有使用索引&#xff0…

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;分别复…

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…

什么是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…

未来科技趋势浅析

基因编辑技术在农业育种上越来越火。这技术能改植物的基因&#xff0c;让它长得更好。比如&#xff0c;科学家用它来培育抗病虫害的作物。这样&#xff0c;农民就不必喷那么多农药了。还有&#xff0c;这种技术还能让作物适应不同的气候条件&#xff0c;这样即使天气不好&#…