粒子系统设置如下:(用的中文,方便识别粒子的属性)
上边挂这个脚本
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace LumberDemo
{
public class EnemyBat_PatticleTool : MonoBehaviour
{
protected ParticleSystem particle;
public GameObject triggerTarget { get; set; }
private void Start()
{
particle = GetComponent<ParticleSystem>();
//核心代码:把粒子的触发设置为想要触发的对象(这里是player)
triggerTarget = GameControler.Instance.playerControler.gameObject;
particle.trigger.SetCollider(0, triggerTarget.transform);
}
List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();
List<ParticleSystem.Particle> inside = new List<ParticleSystem.Particle>();
List<ParticleSystem.Particle> outside = new List<ParticleSystem.Particle>();
protected virtual void OnParticleTrigger()
{
int enterNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
int exitNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
int insideNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
int outsideNum = particle.GetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside);
if (enterNum > 0)
OnEnterCollider(enter);
if (exitNum > 0)
OnExitCollider(exit);
if (insideNum > 0)
OnInSideCollider(inside);
if (outsideNum > 0)
OnOutSideCollider(outside);
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Inside, inside);
particle.SetTriggerParticles(ParticleSystemTriggerEventType.Outside, outside);
}
public virtual void OnEnterCollider(List<ParticleSystem.Particle> enters)
{
ExDebug.Log("OnEnterCollider");
}
public virtual void OnExitCollider(List<ParticleSystem.Particle> exits)
{
ExDebug.Log("OnExitCollider");
}
public virtual void OnInSideCollider(List<ParticleSystem.Particle> insides)
{
ExDebug.Log("OnInSideCollider");
}
public virtual void OnOutSideCollider(List<ParticleSystem.Particle> outsides)
{
ExDebug.Log("OnOutSideCollider");
}
}
}
解释下,核心代码的意义就是代码制定碰撞体(这里是玩家)
这样,粒子碰到玩家之后就会调用OnInSideCollider这个方法,在里边进行自己的操作。
(由灭火器那个改编而来,把他那个业务逻辑删除了,提取了下成通用的模版)