yield return funktioniert nicht?
Hey Leute.
Ich habe mal eine Frage für die Programmierer unter euch.
Ich benutze C# in Unity und benutze den yield return-Befehl, um die Münze wieder erscheinen zu lassen, nachdem man sie eingesammelt hat. Jedoch funktioniert das yield return nicht und die Münze wird nicht mehr erneut angezeigt. Ich bitte um Hilfe.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CoinCollect : MonoBehaviour
{
// Start is called before the first frame update
public GameObject Coin;
public float RespawnTime = 1;
void Start()
{
}
// Update is called once per frame
void Update()
{
}
private void OnCollisionEnter2D(Collision2D collisionPlayer)
{
if (collisionPlayer.gameObject.CompareTag("Player"))
{
StartCoroutine(RespawnCoin());
}
}
IEnumerator RespawnCoin()
{
gameObject.SetActive(false);
yield return new WaitForSecondsRealtime(2);
gameObject.SetActive(true);
}
}
1 Antwort
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
C Sharp, Programmiersprache, Informatik
Offensichtlich liegt das Skript auf dem Coin-Game Object. Wenn du das deaktivierst, stoppst du auch die weitere Ausführung der Coroutine.
Statt das Game Objekt explizit zu deaktivieren, würde es ausreichen, den Renderer zu deaktivieren.
private Renderer _renderer;
void Start()
{
_renderer = GetComponent<Renderer>();
}
void OnCollisionEnter2D(Collision2D collisionObject)
{
if (_renderer.enabled && collisionObject.gameObject.CompareTag("Player"))
{
StartCoroutine(RespawnCoin());
}
}
IEnumerator RespawnCoin()
{
_renderer.enabled = false;
yield return new WaitForSecondsRealtime(2);
_renderer.enabled = true;
}