这是我的代码:
AIBase.js
#pragma strict
var in_action: boolean;
var action: function(): IEnumerator = coroutine;
function Update () {
if(in_action)
return;
in_action = true;
enter_phase();
}
function enter_phase() {
Debug.Log("entering action");
yield action();
in_action = false;
}
function coroutine () {
Debug.Log("in coroutine");
yield WaitForSeconds(1);
}
如果我注释掉“yield WaitForSeconds(1)”代码可以工作,我会在调试日志中看到“在coroutine中”。但是,如果我把它放进去,我就再也看不到了。出于某种原因,我无法通过UnityScript中的指针或函数类正确调用协同程序(但我可以调用普通函数)。我怎样才能获得我想要的功能?
P.S。我意识到我可以写:
yield coroutine();
但我希望能够将此AIBase作为基类,其中的操作由派生类设置。
答案 0 :(得分:1)
修正了它!
这是新代码:
#pragma strict
var in_action: boolean;
var action: function(): IEnumerator = coroutine;
function Update () {
if(in_action)
return;
in_action = true;
enter_phase();
}
function enter_phase() {
Debug.Log("entering action");
yield StartCoroutine(action());
in_action = false;
}
function coroutine () {
Debug.Log("in coroutine");
yield WaitForSeconds(1);
}
只需改变
yield action();
到
yield StartCoroutine(action());