using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
// Use this for initialization
void Start () {
//Declare intager Hunger
int Hunger;
Hunger = 100;
GUI.Box(new Rect(10,10,100,90), "Stats");
GUI.Label (Rect (10,40,100,20), GUI.tooltip,GUIContent("Hunger", Hunger));
}
}
// Update is called once per frame
void Update () {
//Every ten seconds Hunger goes down by one.
Hunger = Hunger - 1;
yield WaitForSeconds = 10;
}
};
};
这是我即将推出的游戏Rust and Wood中的UI代码。它是完美的,但Unity在void Update()中对虚空大喊大叫。请帮忙。
答案 0 :(得分:2)
您不能在Update()方法中使用yield,因为它是每帧执行的。 通过用IEnumerator替换void,只能将Start()方法声明为coroutine。
试试这个。
public class HungerClass : MonoBehaviour {
int Hunger = 100;
IEnumerator Start ()
{
while (true)
{
//Every ten seconds Hunger goes down by one.
Hunger = Hunger - 1;
yield return new WaitForSeconds(10);
}
}
void OnGUI()
{
GUI.Label(new Rect (10,40,100,20), "Hunger = " + Hunger);
}
}
答案 1 :(得分:1)
问题不在void
声明中。
}
方法还有Start
个};
,文件末尾int Hunger;
同样Start
应该在void
方法之外。
修改强>
我注意到你正在尝试使用Coroutines错误。将IEnumerator
替换为WaitForSeconds
并使用正确的Update
协程。另外@JeanLuc表示Start
方法不能用作协程。只有using UnityEngine;
using System.Collections;
public class NewBehaviourScript : MonoBehaviour {
int Hunger;
void Start () {
Hunger = 100;
GUI.Box(new Rect(10,10,100,90), "Stats");
GUI.Label (Rect (10,40,100,20), GUI.tooltip,GUIContent("Hunger", Hunger));
StartCoroutine(TickHunger());
}
IEnumerator TickHunger () {
while(Hunger > 0)
{
//Every ten seconds Hunger goes down by one.
Hunger = Hunger - 1;
yield return new WaitForSeconds(10);
}
}
};
方法。所以你也需要改变它。
所以它应该是:
{{1}}