【问题标题】:unity respawn after delay延迟后统一重生
【发布时间】:2016-07-05 03:07:49
【问题描述】:

我试图在“x”时间重生一个对象,但是当我使用 yield 和 startcourutine 时,它​​会在我的代码中导致很多错误和错误。而不是破坏我想隐藏对象并在延迟后重生时再次启用它。如果我有数组,这怎么可能?

【问题讨论】:

    标签: c# unity3d unity5 timedelay


    【解决方案1】:

    要在同一位置直接重生,您可以这样做:

    public class CrateCrash : MonoBehaviour
    {
        ...
    
        public void InitRespawn(GameObject toRespawn)
        {
            StartCoroutine(RespawnObject(toRespawn, 5.0f));
        }
    
        private IEnumerator RespawnObject(GameObject toRespawn, float delay)
        {
            yield return new WaitForSeconds(delay);
            toRespawn.SetActive(true);
        }
    }
    

    其他类:

    using UnityEngine;
    using System.Collections;
    
    
    public class Crate : MonoBehaviour
    {   
        CrateCrash manager;    
    
        public void OnMouseDown()
        { 
            manager.InitRespawn(gameObject);
    
            gameObject.SetActive(true);
    
        }
    
        public void SetManagerReference(CrateCrash managerRef)
        {
            manager = managerRef;
        }    
    }
    

    【讨论】:

    • 嘿,贡纳尔!谢谢你下面的代码做我想要的但是它只是禁用对象并再次启用它。我想为它分配我拥有的新职位和新类型
    • @Alex 所以分配你的新位置并输入RespawnObject() 协程。
    • 不,您可以从协程(而不是SetActive)中调用它们并将游戏对象作为参数传递。然后不要使用Instantiate,而是在那里调用SetActive(并设置位置,不管你在SetActive之前还是之后这样做都没有关系)。
    • @iggy 我怎么会出错。它的工作,但按时我的空闲位置得到 0 并且在那之后它不起作用
    猜你喜欢
    • 2021-11-08
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多