我正在尝试制作一个计时器来控制游戏对象的显示,我发现t
变为零时并没有改变,我该如何解决或其他更好的解决方案?
public class randomGopher : MonoBehaviour
{
// Use this for initialization
public int t;
public bool active;
void Start()
{
t = Random.Range(30, 150);
}
// Update is called once per frame
void Update()
{
Debug.Log(t);
if (t == 0)
{
active = this.gameObject.activeSelf;
this.gameObject.SetActive(!active);
t = Random.Range(30, 150);
}
else
{
t = t - 1;
}
}
}
最好的方法是在单独的GameObject中执行脚本,并且仅激活或停用TargetObject。
public class randomGopher : MonoBehaviour
{
// Use this for initialization
public int t;
public bool active;
public GameObject TargetObj;
void Start()
{
t = Random.Range(30, 150);
}
// Update is called once per frame
void Update()
{
Debug.Log(t);
if (t == 0)
{
active = TargetObj.activeSelf;
TargetObj.SetActive(!active);
t = Random.Range(30, 150);
}
else
{
t = t - 1;
}
}
}
所以您的问题是,如果脚本附加到的Update
在之后无效,则不再调用[C0
GameObject
((不是100%肯定,现在无法在智能手机上打字时对其进行测试。)
Afaik gameObject.SetActive(false);
仍在禁用的Invoke
或无效的Invoke
上也起作用(至少我知道MonoBehaviour
是这种情况,所以您可以简单地使用类似的东西)>
GameObject