unity新粒子系统的碰撞和触发

unity中新的粒子系统中碰撞:
首先勾选粒子系统属性面板上的collision,然后勾选send collision messages,就可以从代码中检测粒子的碰撞了;
这里捡几个重要的属性说明一下:
dampen 抑制 取值范围0-1,当为1时,粒子碰到碰撞器后会消失;
bounce 反弹 让粒子碰到碰撞器后反弹回去;
colliders with 选择可以发生碰撞的层;
这里写图片描述

unity中的粒子系统中的触发:
勾选属性面板上的triggers;
colliders 将要与粒子发生触发条件的对象放这;
inside 在触发器内部;
outside 在触发器外部;
exit 离开触发器;
enter 进入触发器;
ignore 忽略粒子 kill 干掉粒子 callback 代码控制粒子
radius scale 调大数值可以增加触发器范围;
这里写图片描述

代码来了:

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

public class ParticleCollider : MonoBehaviour {

    //发生粒子碰撞的回调函数
    private void OnParticleCollision(GameObject other)
    {
        print(other.name);
    }
    //粒子触发的回调函数
    private void OnParticleTrigger()
    {
        //只要勾选了粒子系统的trigger,程序运行后会一直打印
        print("触发了");

        //官方示例,拿来说明
        ParticleSystem ps = transform.GetComponent<ParticleSystem>();

        List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
        List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();
        //particleSystemTriggerEventType为枚举类型,Enter,Exit,Inside,Outside,对应粒子系统属性面板上的四个选项
        int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
        int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
        //进入触发器,粒子变为红色
        for (int i = 0; i < numEnter; i++)
        {
            ParticleSystem.Particle p = enter[i];
            p.startColor = Color.red;
            enter[i] = p;
        }
        //退出触发器 粒子变为蓝绿色
        for (int i = 0; i < numExit; i++)
        {
            ParticleSystem.Particle p = exit[i];
            p.startColor = Color.cyan;
            exit[i] = p;
        }

        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter,enter);
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit,exit);
    }

}

这里写图片描述

猜你喜欢

转载自blog.csdn.net/fenglele_fans/article/details/80547984