我想在Unity3d中使用SetActive(True/False)
命令重新出现并随机消失。我不希望它移动到任何地方,我使用Unity3d C#(对于那些需要知道的人)我还没有尝试过任何东西。
答案 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
将是实际激活/停用的检查员。请参阅有关如何在检查器中连接元素的图像
答案 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();
}