在Unity for Particle Systems中设置If Else语句循环

时间:2018-05-01 21:15:44

标签: c# unity3d scripting

我刚开始使用Unity 2天前。我在Unity中创建了4个粒子系统,我试图在我创建的行星上制作动画但我想让每个粒子系统活动10-20秒,具体取决于来自外部源的.txt文件。有谁知道如何去做这件事?

有点像这样

if (line == 'Anger')
     #play said animation
else if (line == 'Excitement')
     #play other animation
else
     #play last animation

我是否必须创建每个粒子系统需要读取的脚本?

1 个答案:

答案 0 :(得分:0)

这并不容易。

您可以做的最好的事情是为每个粒子系统设置不同的对象。他们最初都被禁用了。然后,当您想要播放特定的粒子样式时,使用您想要的粒子系统

打开该对象
gameObject.SetActive(true);

如果您想让它们仅在指定的时间段内保持活动状态,请使用协程,然后在经过的时间之后禁用您的对象以将其关闭。使用世界空间粒子可以防止所有粒子在物体被禁用时消失。

或者跳过协同程序并在检查器中手动设置粒子系统持续时间,或通过getcomponent<>()更改它;

快速举例:

// Assign the game objects manually from the Unity interface via drag and drop. That is why public GameObject[].

Public GameObject[] ParticleSystems;
Private String[] YourEmotions;
float activationDuration = 15f;

// Your code to retrieve the txt value and assign to 'YourEmotions' array, or use YourEmotions = {"Angry", "Sad", "Happy"};. Have the order match the order of the equivalent game object. Then when you need the particle system, active it by calling StartParticularParticleSystem and passing in the string identifier of the one you want to use.
// ...

Public Void StartParticularParticleSystem(string Emotion)
{

    for(int i = 0; i < ParticleSystems.Count; i++)
    {
       if(Emotion == YourEmotions[i])
       {
          StartCoroutine(MyCoroutine(ParticleSystems[i]));
       }
    }

}

IEnumerator MyCoroutine (GameObject ObjectToActivate)
{
    ObjectToActivate.SetActive(True);    
    yield return new WaitForSeconds(activationDuration);
    ObjectToActivate.SetActive(False);
}

我相信还有其他方法可以做到这一点。我不认为任何事情会非常简单。