统一粒子系统播放和停止
本文关键字:播放 粒子系统 | 更新日期: 2023-09-27 18:11:58
我的particlesystem.Play()
不工作。我花了几个小时研究这个问题,但还是没有弄明白。
每当我的角色击中一个对象时,它将调用函数particleAuraPlay()
,并且日志消息"HIT"显示,这意味着该函数被正确调用。
当playAura
设置为true时,粒子应该播放,并且再次显示日志信息"Running"。由于消息显示,我假设我的逻辑是正确的,但粒子只是不会开始播放。有人能解决我的问题吗?
using UnityEngine;
using System.Collections;
public class ParticleController : MonoBehaviour {
private bool playAura = false;
private ParticleSystem particleObject;
void Start () {
particleObject = GetComponent<ParticleSystem>();
particleObject.Stop();
}
void Update () {
if (playAura)
{
Debug.Log("Running");
particleObject.Play();
}
}
public void particleAuraPlay()
{
Debug.Log("HIT");
playAura = true;
}
}
当playAura设置为true时,粒子应该播放,并再次播放日志信息"Running"也出现了。因为消息是我假设我的逻辑是正确的,但是粒子就是不能启动玩
是一个逻辑错误。
调用particleAuraPlay()
函数时,playAura
设置为true
。
在Update函数中,particleObject.Play();
将在每一帧中调用,因为playAura
是true
。
你不能这样。每一帧调用particleObject.Play();
实际上不会做任何事情,因为它会尝试在每一帧中播放和停止粒子,导致根本没有粒子。
解决方案是检查playAura
是否为true
,如果true
,调用particleObject.Play();
函数,然后将playAura
设置为false
,以便particleObject.Play();
函数不会再次被调用,直到particleAuraPlay()
再次被调用。
新的Update()
函数修复了逻辑错误:
void Update()
{
if (playAura)
{
Debug.Log("Running");
particleObject.Play();
playAura = false;
}
}
在你的particleAuraPlay()函数中,你只需要检查你的pariclessystem是否正在运行,你可以通过这段代码实现这一点…
public void particleAuraPlay(){
if(!particleObject.isPlaying){
particleObject.Play();
}
}