Unity中随机出现和消失的对象

时间:2015-07-18 16:22:13

标签: c# unity3d

我想在Unity3d中使用SetActive(True/False)命令重新出现并随机消失。我不希望它移动到任何地方,我使用Unity3d C#(对于那些需要知道的人)我还没有尝试过任何东西。

2 个答案:

答案 0 :(得分:2)

如果您更喜欢更安全,更快速的方法而不使用字符串查找方法名称(这通常是一个坏主意),您可以使用协程:

using UnityEngine;
using System.Collections;

public class ToggleVisibility : MonoBehaviour 
{
    public GameObject GameObjectToHide;
    public float MinTime = 2.0f;
    public float MaxTime = 5.0f;

    void Start()
    {
        StartCoroutine(ToggleVisibilityCo(GameObjectToHide));
    }

    IEnumerator ToggleVisibilityCo(GameObject someObj)
    {
        if (someObj == null) yield break;

        while(true)
        {
            someObj.SetActive(!someObj.active);

            yield return new WaitForSeconds(Random.Range(MinTime, MaxTime));
        }

    }

}

但是,您必须考虑到 - 无论您遵循什么方法 - 如果您将对象设置为非活动状态,它包含的所有MonoBehaviour都将停止工作,因此您需要将此脚本放在一个处于活动状态的GameObject中,并设置在检查员GameObjectToHide将是实际激活/停用的检查员。请参阅有关如何在检查器中连接元素的图像

example

答案 1 :(得分:0)

您可以使用Invoke一次调用appearAndDisappear并使用Random.Range使其成为随机时间,然后在您的并显示出来以使其更随机,您可以添加Random.Range,如果它的值大于一半使它看起来如果不让它保持消失然后再次调用Invoke让它永远消失你应该玩值来达到你需要的东西

void Invoker() {
        Invoke("appearDisappear", Random.Range(2.0F, 5.0F));
    }

void appearDisappear(){

  float x = Random.Range(0.0F, 6.0F);
  if(x>3){
      someObj.SetActive(True);
   }
     else
         someObj.SetActive(false) ; 

 Invoker();

}