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);
            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对象,进行爆炸(参数随你);

禁用飞行脚本;

速度归零;

自由落体。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架

2025年1月7号&#xff0c;由杨德杰、赵子敬、刘洋联合提出PlanLLM&#xff0c;一种基于可微调大型语言模型&#xff08;LLM&#xff09;的跨模态联合学习框架&#xff0c;用于解决视频程序规划任务。通过引入LLM增强规划模块和互信息最大化模块&#xff0c;PlanLLM突破了现有方…

链表(LinkedList) 1

上期内容我们讲述了顺序表&#xff0c;知道了顺序表的底层是一段连续的空间进行存储(数组)&#xff0c;在插入元素或者删除元素需要将顺序表中的元素整体移动&#xff0c;时间复杂度是O(n)&#xff0c;效率比较低。因此&#xff0c;在Java的集合结构中又引入了链表来解决这一问…

[手机Linux] onepluse6T 系统重新分区

一&#xff0c;刷入TWRP 1. 电脑下载 Fastboot 工具&#xff08;解压备用&#xff09;和对应机型 TWRP&#xff08;.img 后缀文件&#xff0c;将其放入前面解压的文件夹里&#xff09; 或者直接这里下载:TWRP 2. 将手机关机&#xff0c;长按音量上和下键 开机键 进入 fastbo…

活动预告 |【Part1】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识

课程介绍 通过参加“Microsoft 安全在线技术公开课&#xff1a;安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中&#xff0c;你将获得所需的安全技能和培训&#xff0c;以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知识…

从零开始玩转Docker:轻松开启容器化之旅

一、什么是 Docker Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。简单来说&#xff0c;Docker 就像是一个超级 “快递箱”&#xff0c…

为何实现大语言模型的高效推理以及充分释放 AI 芯片的计算能力对于企业级落地应用来说,被认为具备显著的研究价值与重要意义?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ AI 芯片&#xff1a;为人工智能而生的 “大脑” AI 芯片&#xff0c;又称人工智能加速器或计算卡&#xff0c;是专为加速人工智能应用&#xff0c;特别是深度学习任务设计的专用集成电路&#xff08;A…

软件模拟I2C案例(寄存器实现)

引言 在经过前面对I2C基础知识的理解&#xff0c;对支持I2C通讯的EEPROM芯片M24C02的简单介绍以及涉及到的时序操作做了整理。接下来&#xff0c;我们就正式进入该案例的实现环节了。本次案例是基于寄存器开发方式通过软件模拟I2C通讯协议&#xff0c;然后去实现相关的需求。 阅…

【redis】数据类型之hash

Redis中的Hash数据类型是一种用于存储键值对集合的数据结构。与Redis的String类型不同&#xff0c;Hash类型允许你将多个字段&#xff08;field&#xff09;和值&#xff08;value&#xff09;存储在一个单独的key下&#xff0c;从而避免了将多个相关数据存储为多个独立的key。…

5.2Internet及其作用

5.2.1Internet概述 Internet称为互联网&#xff0c;又称英特网&#xff0c;始于1969年的美国ARPANET&#xff08;阿帕网&#xff09;&#xff0c;是全球性的网络。 互连网指的是两个或多个不同类型的网络通过路由器等网络设备连接起来&#xff0c;形成一个更大的网络结构。互连…

深度学习模型蒸馏技术的发展与应用

随着人工智能技术的快速发展&#xff0c;大型语言模型和深度学习模型在各个领域展现出惊人的能力。然而&#xff0c;这些模型的规模和复杂度也带来了显著的部署挑战。模型蒸馏技术作为一种优化解决方案&#xff0c;正在成为连接学术研究和产业应用的重要桥梁。本文将深入探讨模…

网络与数据安全

目录 数据加密对称加密&#xff08;Symmetric Encryption&#xff09;非对称加密&#xff08;Asymmetric Encryption&#xff09;哈希算法&#xff08;Hash Functions&#xff09;数字签名&#xff08;Digital Signature&#xff09;密钥管理&#xff08;Key Management&#x…

< OS 有关 > 利用 google-drive-ocamlfuse 工具,在 Ubuntu 24 系统上 加载 Google DRIVE 网盘

Created by Dave On 8Feb.2025 起因&#xff1a; 想下载 StableDiffusion&#xff0c;清理系统文件时把 i/o 搞到 100%&#xff0c;已经删除到 apt 缓存&#xff0c;还差 89MB&#xff0c;只能另想办法。 在网上找能不能挂在 Google 网盘&#xff0c;百度网盘&#xff0c;或 …

05vue3实战-----配置项目代码规范

05vue3实战-----配置项目代码规范 1.集成editorconfig配置2.使用prettier工具2.1安装prettier2.2配置.prettierrc文件&#xff1a;2.3创建.prettierignore忽略文件2.4VSCode需要安装prettier的插件2.5VSCod中的配置2.6测试prettier是否生效 3.使用ESLint检测3.1VSCode需要安装E…

【漫话机器学习系列】084.偏差和方差的权衡(Bias-Variance Tradeoff)

偏差和方差的权衡&#xff08;Bias-Variance Tradeoff&#xff09; 1. 引言 在机器学习模型的训练过程中&#xff0c;我们常常面临一个重要的挑战&#xff1a;如何平衡 偏差&#xff08;Bias&#xff09; 和 方差&#xff08;Variance&#xff09;&#xff0c;以提升模型的泛…

23.PPT:校摄影社团-摄影比赛作品【5】

目录 NO12345​ NO6 NO7/8/9/10​ 单元格背景填充表格背景填充文本框背景填充幻灯片背景格式设置添加考生文件夹下的版式 NO12345 插入幻灯片和放入图片☞快速&#xff1a;插入→相册→新建相册→文件→图片版式→相框形状→调整边框宽度左下角背景图片&#xff1a;视图→…

OpenCV:图像修复

目录 简述 1. 原理说明 1.1 Navier-Stokes方法&#xff08;INPAINT_NS&#xff09; 1.2 快速行进方法&#xff08;INPAINT_TELEA&#xff09; 2. 实现步骤 2.1 输入图像和掩膜&#xff08;Mask&#xff09; 2.2 调用cv2.inpaint()函数 2.3 完整代码示例 2.4 运行结果 …

快速建立私有化知识库(私有化训练DeepSeek,通过ollama方式)

简介 什么&#xff1f;&#xff01;老是有人问你需求&#xff0c;不同版本的需求你记不清还得去扒拉过程文档、设计文档&#xff1f; 什么&#xff1f;&#xff01;领导会询问功能使用情况、用户相关数据&#xff0c;你每次还得手动查询反馈&#xff1f; 什么&#xff1f;&…

python脚本实现windows电脑内存监控内存清理(类似rammap清空工作集功能)

import ctypes import psutil import time import sys import os from datetime import datetime import pyautogui# 检查管理员权限 def is_admin():try:return ctypes.windll.shell32.IsUserAnAdmin()except:return False# 内存清理核心功能 def cleanup_memory(aggressivene…

网络安全:挑战、技术与未来发展

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 在数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着互联网的普及和信息技术的高速发展&#xff0c;网络攻击的…

Verilog语言学习总结

Verilog语言学习&#xff01; 目录 文章目录 前言 一、Verilog语言是什么&#xff1f; 1.1 Verilog简介 1.2 Verilog 和 C 的区别 1.3 Verilog 学习 二、Verilog基础知识 2.1 Verilog 的逻辑值 2.2 数字进制 2.3 Verilog标识符 2.4 Verilog 的数据类型 2.4.1 寄存器类型 2.4.2 …