我的particlesystem.Play()
不起作用。我在这个问题上花了几个小时,仍然无法弄明白。
每当我的角色遇到一个对象时,它将调用函数particleAuraPlay()
,并且日志消息“HIT”显示这意味着该函数被正确调用。
当playAura
设置为true时,粒子应该播放,并且同样会显示日志消息“正在运行”。由于消息显示我认为我的逻辑是正确的但粒子不会开始播放。有谁可以解决我的问题?
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;
}
}
答案 0 :(得分:0)
当playAura设置为true时,粒子应该再次播放 日志消息&#34; Running&#34;也出现了。由于消息是 显示我认为我的逻辑是正确的,但粒子刚刚开始 打
这是一个逻辑错误。
调用particleAuraPlay()
函数时,playAura
设置为true
。
在更新功能中,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;
}
}
答案 1 :(得分:0)
在您的particleAuraPlay()函数中,您只需要检查ParicleSystem是否正在运行,就可以通过以下代码实现这一目标...
public void particleAuraPlay(){
if(!particleObject.isPlaying){
particleObject.Play();
}
}