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

news2025/2/8 17:20:49

效果

准备

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

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

爆炸脚本编写

新建一个脚本命名为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);
            else
                fire.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);
    else
        fire.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.coloradmin.cn/o/2294875.html

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

相关文章

嵌入式面试题 C/C++常见面试题整理_7

一.什么函数不能声明为虚函数? 常见的不能声明为虚函数的有:普通函数(非成员函数):静态成员函数;内联成员函数;构造函数;友元函数。 1.为什么C不支持普通函数为虚函数?普通函数(非成员函数)只能被overload&#xff0c;不能被override&#xff0c;声明为虚函数也没有什么意思…

excel实用问题:提取文字当中的数字进行运算

0、前言&#xff1a; 这里汇总在使用excel工作过程中遇到的问题&#xff0c;excel使用wps版本&#xff0c;小规模数据我们自己提取数据可行&#xff0c;大规模数据就有些难受了&#xff0c;因此就产生了如下处理办法。 需求&#xff1a;需要把所有文字当中的数字提取出来&…

【prompt实战】AI +OCR技术结合ChatGPT能力项目实践(BOL提单识别提取专家)

本文原创作者:姚瑞南 AI-agent 大模型运营专家,先后任职于美团、猎聘等中大厂AI训练专家和智能运营专家岗;多年人工智能行业智能产品运营及大模型落地经验,拥有AI外呼方向国家专利与PMP项目管理证书。(转载需经授权) 目录 1. 需求背景 2. 目标 3. BOL通用处理逻辑…

昇思打卡营第五期(MindNLP特辑)番外:硅基流动 x 华为云DeepSeek V3 API推理MindTinyRAG

1.前言 前脚&#xff0c;DeepSeek面临的巨头企业官宣加入vs多国政府下场质疑的冰火两重天局势尚未平静&#xff08;DeepSeek在美两重天&#xff1a;五大巨头接入&#xff0c;政府诚惶诚恐&#xff09;&#xff1b;后脚&#xff0c;OpenAI被逼急&#xff0c;凌晨亮出全新推理…

DeepSeek R1 Distill Llama 70B(免费版)API使用详解

DeepSeek R1 Distill Llama 70B&#xff08;免费版&#xff09;API使用详解 在人工智能领域&#xff0c;随着技术的不断进步&#xff0c;各种新的模型和应用如雨后春笋般涌现。今天&#xff0c;我们要为大家介绍的是OpenRouter平台上提供的DeepSeek R1 Distill Llama 70B&…

LabVIEW与PLC交互

一、写法 写命令立即读出 写命令后立即读出&#xff0c;在同一时间不能有多个地方写入&#xff0c;因此需要在整个写入后读出过程加锁 项目中会存在多个循环并行执行该VI&#xff0c;轮询PLC指令 在锁内耗时&#xff0c;就是TCP读写的实际耗时为5-8ms&#xff0c;在主VI六个…

Selenium记录RPA初阶 - 基本输入元件

防止自己遗忘&#xff0c;故作此为记录。 爬取网页基本元件并修改后爬取。 包含元件&#xff1a; elements: dict[str, str] {"username": None,"password": None,"email": None,"website": None,"date": None,"ti…

第三个Qt开发实例:利用之前已经开发好的LED驱动在Qt生成的界面中控制LED2的亮和灭

前言 上一篇博文 https://blog.csdn.net/wenhao_ir/article/details/145459006 中&#xff0c;我们是直接利用GPIO子系统控制了LED2的亮和灭&#xff0c;这篇博文中我们利用之前写好的LED驱动程序在Qt的生成的界面中控制LED2的亮和灭。 之前已经在下面两篇博文中实现了LED驱动…

Android studio 创建aar包给Unity使用

1、aar 是什么&#xff1f; 和 Jar有什么区别 aar 和 jar包 都是压缩包&#xff0c;可以使用压缩软件打开 jar包 用于封装 Java 类及其相关资源 aar 文件是专门为 Android 平台设计的 &#xff0c;可以包含Android的专有内容&#xff0c;比如AndroidManifest.xml 文件 &#…

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…

把DeepSeek接入Word软件,给工作提质增效!

前几天给大家分享了 DeepSeek 的资源包&#xff0c;可能很多人并没有本地部署 DeepSeek 的需求&#xff0c;只想使用它来提高一下工作效率。那今天来分享一下怎么直接在 Word 软件调用 DeepSeek&#xff0c;避免在 Word 软件和网页版 DeepSeek 里来回切换。 ## 前置条件 1、有…

Linux进阶——web服务器

一、相关名词解释及概念&#xff1a; www&#xff1a;(world wide web)全球信息广播&#xff0c;通常来说的上网就是使用www来查询用户所需的信息。使用http超文本传输协议。 过程&#xff1a;web浏览器向web服务&#xff08;Apache&#xff0c;Microsoft&#xff0c;nginx&…

QT笔记——多语言翻译

文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能&#xff0c;实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…

oracle 基础语法复习记录

Oracle SQL基础 因工作需要sql能力&#xff0c;需要重新把sql这块知识重新盘活&#xff0c;特此记录学习过程。 希望有新的发现。加油&#xff01;20250205 学习范围 学习SQL基础语法 掌握SELECT、INSERT、UPDATE、DELETE等基本操作。 熟悉WHERE、GROUP BY、ORDER BY、HAVIN…

网络工程师 (22)网络协议

前言 网络协议是计算机网络中进行数据交换而建立的规则、标准或约定的集合&#xff0c;它规定了通信时信息必须采用的格式和这些格式的意义。 一、基本要素 语法&#xff1a;规定信息格式&#xff0c;包括数据及控制信息的格式、编码及信号电平等。这是协议的基础&#xff0c;确…

【银河麒麟高级服务器操作系统】系统日志Call trace现象分析及处理全流程

了解更多银河麒麟操作系统全新产品&#xff0c;请点击访问 麒麟软件产品专区&#xff1a;https://product.kylinos.cn 开发者专区&#xff1a;https://developer.kylinos.cn 文档中心&#xff1a;https://document.kylinos.cn 服务器环境以及配置 系统环境 物理机/虚拟机/云…

Milvus 存储设计揭秘:从数据写入到 Segment 管理的全链路解析

作为一款云原生向量数据库&#xff0c;Milvus 的高效查询性能有赖于其独特的存储架构设计。然而&#xff0c;在实际使用过程中&#xff0c;许多社区用户常常会遇到以下问题&#xff1a; 为什么频繁调用 flush 后&#xff0c;查询速度会变慢&#xff1f; 数据删除后&#xff0c;…

Redis双写一致性(数据库与redis数据一致性)

一 什么是双写一致性&#xff1f; 当修改了数据库&#xff08;MySQL&#xff09;中的数据&#xff0c;也要同时更新缓存&#xff08;redis&#xff09;中的数据&#xff0c;缓存中的数据要和数据库中的数据保持一致 双写一致性&#xff0c;根据业务对时间上的要求&#xff0c;…

14.PPT:中国注册税务师协会宣传【26】

目录 NO12 NO3/4/5​ NO678​ 【文本框水平/垂直居中】【文本框内容水平/垂直居中】 NO12 坑&#xff1a;注意❗Word文档的PPt素材.docx的标题大纲是混乱的&#xff0c;虽然他设置了&#xff0c;所以我们需要重新设置 设计→主题视图→幻灯片母版→删除版式插入logo NO3/4…

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章&#xff1a; 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境&#xff0c;均为 windows 环境&#xff0c;mac 环境其实也类似 ~ ① 编译proto文件&#xff0c;相关插件 简单介绍&#xff1a; protoc 是编译器&#xff0c;用于将…