Unity:不能通过指针/"函数"来调用协同程序。类?

时间:2014-08-11 16:42:43

标签: unity3d unityscript

这是我的代码:

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作为基类,其中的操作由派生类设置。

1 个答案:

答案 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());