unity实现轰炸区的效果

421 阅读3分钟

1.新建粒子系统

image.png

2.新建材质

  1. 更改材质类型为skybox-cubemap
  2. 更改颜色
  3. 更改cubmap类型 image.png

3.更改粒子系统的配置

1.配置持续时间、起始生命周期(可以调节火的长度)、发射(随单位时间产生的粒子数)-类似于火的浓度大小 image.png

2.设置形状类型为椎体,半径(相对于圆锥的半径,宽度)

image.png

3.设置生命周期颜色(火焰的过渡颜色)和生命周期大小(火焰的幅度变化,从大到小的变化)

image.png

4.勾选触发器、设置渲染器(可以改变粒子系统本身的形状)、材质选择part开头的火焰效果、

image.png

4.为粒子系统fire添加刚体和胶囊碰撞体

配置胶囊碰撞体的数值(方向设置为z轴、高度适中)、勾选为触发器 注意:不勾选触发器的时候会出现碰撞不到的情况

image.png

5.挂载脚本文件到fire粒子系统上

并将爆炸的效果挂载到粒子系统上(此变量是在脚本文件中声明的变量的)

image.png

6.编写fire脚本文件

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class fire : MonoBehaviour
{
    // 关联爆炸效果
    public GameObject boom;
    void Start()
    {
        
    }

    // 
    void Update()
    {
        
        //火有个向下的速度  火落地的时候或者碰到其他物体要爆炸

    }
    private void OnTriggerEnter(Collider target)
    {
        Debug.Log("碰到了");
        //target拿到碰撞对象

        //显示爆炸效果 --其实就是克隆
        GameObject clone = Instantiate(boom, transform.position,transform.rotation);//克隆爆炸对象到火的位置
        Destroy(this.gameObject);
        Destroy(clone, 0.3f);
        
    }
}

7.将左上角的粒子系统fire移动到asset文件夹中

将烟花当做一种对象进行拖入

image.png

8.新建getFire脚本文件

并将脚本文件挂载到FirePoint空对象中

image.png

9.编写getFire脚本文件

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class getfire : MonoBehaviour
{
    public GameObject fire; //关联火
    private float time = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // 每隔0.5秒出现火团 不能一开始出现很多火
    void Update()
    {
        //每次增加时间
        time += Time.deltaTime;
        if(time >= 0.7f)
        {
            //克隆火  Quaternion.identity-不旋转
            Instantiate(fire,new Vector3(transform.position.x+Random.Range(-10,10),
                transform.position.y,transform.position.z+Random.Range(-10,10)),Quaternion.identity);
            time = 0; //重置
        }
    }
}

更新的fire文件

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class fire : MonoBehaviour
{
    // 关联爆炸效果
    public GameObject boom;
    public Rigidbody rig;
    void Start()
    {
        rig = GetComponent<Rigidbody>();
    }

    // 
    void Update()
    {

        //火有个向下的速度  火落地的时候或者碰到其他物体要爆炸
        rig.velocity = new Vector3(0, -10f, 0);
    }
    private void OnTriggerEnter(Collider target)
    {
        Debug.Log("碰到了");
        //target拿到碰撞对象

        //显示爆炸效果 --其实就是克隆
        GameObject clone = Instantiate(boom, transform.position,transform.rotation);//克隆爆炸对象到火的位置
        Destroy(this.gameObject);
        Destroy(clone, 0.3f);
        
    }
}

注意:

fire脚本文件主要实现的是关联爆炸对象、获取刚体,设置火向下的速度;当火碰撞其他物体的时候克隆碰撞位置的爆炸效果,并且隔一回儿消除爆炸效果和克隆爆炸对象

getFire脚本文件主要实现的是关联火fire的对象,每次更新设置火焰出现的时间并且在活的周围克隆火的对象,使之成为轰炸区的效果

每次更新完时间>=0.7后需要把时间重置为0,不然火焰会到处释放。

10.效果如下:

动画6.gif