代码之家  ›  专栏  ›  技术社区  ›  klavyeadam

如何在另一个函数中访问OnTriggerEnter2D中的值?

  •  3
  • klavyeadam  · 技术社区  · 7 年前
    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);
        }
    }
    

    我只是想在太短的时间后销毁我的物体,使其看起来更好。在里面 IEnumerator 我无法访问 trig.gameObject 因为它是在 OnTriggerEnter2D . 有没有办法访问此值? 我还试着把 迭代器 在OnTriggerEnter2D中,它也不起作用。有点新手

    1 回复  |  直到 7 年前
        1
  •  4
  •   Programmer    7 年前

    你不必那么做。这个 Destroy 函数可以将第二个参数作为对象销毁之前的延迟时间。

    Destroy(trig.gameObject, 1f);
    

    如果您仍然想使用协程来实现这一点,只需将 BowlDestroyTime 要执行的函数 GameObject 作为参数,然后从 OnTriggerEnter2D 功能 保龄球比赛时间 要销毁的功能。

    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);
    }