Search code examples
c#unity-game-enginedestroygameobjectienumerator

How to access a value from OnTriggerEnter2D in another function?


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RedHP : MonoBehaviour
{

    public float HP = 5;
    public GameObject BlueWon;
    public GameObject Restart;

    void OnTriggerEnter2D(Collider2D trig)
    {
        if (trig.gameObject.tag == "ThrowableBlue")
        {
            StartCoroutine(BowlDestroyTime());
            HP--;
            if (HP <= 0)
            {
                BlueWon.SetActive(true);
                Restart.SetActive(true);
                PlayerBlueController.canMove = false;
                PlayerBlueController.canFire = false;
            }
        }
    }

    IEnumerator BowlDestroyTime()
    {
        yield return new WaitForSeconds(1);
        Destroy(trig.gameObject);
    }
}

I simply want to destroy my object after too little period of time to make it look better. In IEnumerator I can't access trig.gameObject because it is defined in OnTriggerEnter2D. Is there a way to access this value? I also tried to put IEnumerator in OnTriggerEnter2D it also didn't work. Kinda newbie


Solution

  • You don't have to do that. The Destroy function can take a second parameter as a delay time before the Object is destroyed.

    Destroy(trig.gameObject, 1f);
    

    If you still want to use coroutine to do this, simply make the BowlDestroyTime function to take GameObject as parameter then pass the GameObject from the OnTriggerEnter2D function to the BowlDestroyTime function to be destroyed.

    void OnTriggerEnter2D(Collider2D trig)
    {
        if (trig.gameObject.tag == "ThrowableBlue")
        {
            StartCoroutine(BowlDestroyTime(trig.gameObject));
            HP--;
            if (HP <= 0)
            {
                BlueWon.SetActive(true);
                Restart.SetActive(true);
                PlayerBlueController.canMove = false;
                PlayerBlueController.canFire = false;
            }
        }
    }
    
    IEnumerator BowlDestroyTime(GameObject tartgetObj)
    {
        yield return new WaitForSeconds(1);
        Destroy(tartgetObj);
    }