2016-04-23 3 views
1

Ich habe ein sammelbares Objekt, das ein anderes Objekt als Kind hat, das ein Partikelsystem hat. Wenn der Spieler in das Sammelobjekt hineinrennt, sollte das Sammelobjekt zerstört werden und das Partikelsystem sollte spielen. Der folgende Code funktioniert korrekt, wenn das Spielobjekt die Szene platziert, aber sobald ich es vorfabriziere und in Code instanziiere - das Partikelsystem funktioniert nicht mehr.Collectable Objekt funktioniert nicht, sobald ich es vorfabriziere

Irgendwelche Ideen? Prost!

using UnityEngine; 
using System.Collections; 

public class collectable : MonoBehaviour { 

    GameObject birdParticleObject; 
    ParticleSystem birdParticlesystem; 


    void Start() { 

     birdParticleObject = GameObject.Find("BirdParticleSystem"); 
     birdParticlesystem = birdParticleObject.GetComponent<ParticleSystem>(); 
    } 

    // Update is called once per frame 
    void Update() { 

    } 


    void OnTriggerEnter(Collider other) 
    { 
     if(other.tag == "Player") { 

      birdParticlesystem.Play(); 
      Destroy(gameObject); 
    } 

    } 
} 
+0

Was GameObject Sie vorfabrizieren und zu instanziieren, das sammelbare oder das birdParticleObject? –

+0

verwenden Sie öffentliche Variablen und verknüpfen sie mit den Dingen in der Szene? Vergiss nicht, dass du keinen Link zu deiner Szene "vorfabrizieren" kannst. (Natürlich weiß das Fertigteil nichts über eine Szene - es könnte morgen in einem anderen Spiel sein!) – Fattie

+0

Prefab kann zwar keinen dauerhaften Verweis auf ein Szenenobjekt haben, aber es kann eigene Objekte haben. –

Antwort

3

Ich denke, Ihr Problem im Bereich liegt, der sagt:

birdParticlesystem.Play(); 
Destroy(gameObject); 

Sie das Partikelsystem zu sagen sofort zu spielen und dann Eltern ist es zu zerstören, das wird zerstört es auch. Versuchen:

 birdParticlesystem.Play(); 
    birdParticlesystem.transform.SetParent(null); 
    Destroy(gameObject); 

Dies wird das Partikelsystem entfernen es Eltern, bevor die Sammler-Objekt zu zerstören. Sie sollten dann das Partikelsystem Destroy() einmal abspielen, sonst wird es in der Szene gelassen.

Verwandte Themen