C# / Unity 3D Problem bei verzögerter Action

01/15/2015 00:17 strubelz#1
Ich wollte bei einem kleinen Testspiel in Unity 3d immer wenn ich ein Pickup sammle einen Partikeleffekt abspielen (das funktioniert auch wunderbar) und ihn dann nach 2 Sekunden wieder löschen, damit ich nicht irgendwann hunderttausend unbenutzte Partikeleffekte in der Welt rumstehen habe, das mit dem verzögerten löschen funktioniert aber noch nicht so ganz bei meinem Code:
Code:
	void OnTriggerEnter(Collider other) {

		if (other.gameObject.tag == "PickUp") {
			SetRandomPickupPosition();
			count++;
			SetCountText();
			var particleClone = Instantiate(particle, pickup.transform.position, pickup.transform.rotation);
			Action a = () => Destroy(particleClone);
			DelayedAction(2.0f, a);
		}

	}
	IEnumerator DelayedAction(float delay, Action action) {
		yield return new WaitForSeconds(delay);
		action.Invoke();
	}
fehlermeldungen gibts keine, und wenn ich es so schreibe wird der Effekt auch direkt gelöscht:
Code:
	void OnTriggerEnter(Collider other) {

		if (other.gameObject.tag == "PickUp") {
			SetRandomPickupPosition();
			count++;
			SetCountText();
			var particleClone = Instantiate(particle, pickup.transform.position, pickup.transform.rotation);
			Destroy(particleClone);
		}

	}
	IEnumerator DelayedAction(float delay, Action action) {
		yield return new WaitForSeconds(delay);
		action.Invoke();
	}
//Edit: Ich habe den Fehler gefunden, ich musste anstatt "DelayedAction(2.0f, a);", "StartCoroutine(DelayedAction(2.0f, a));" schreiben...
01/15/2015 19:14 snow#2
#moved