Unity3d 如何以统一的方式等待特定的秒数

Unity3d 如何以统一的方式等待特定的秒数,unity3d,unityscript,Unity3d,Unityscript,我想在unity 2d游戏中制作一个加载条,每1秒实例化7个立方体。 我用过: yield WaitForSeconds(1) 在每个实例化语句之后的函数更新中,但它不起作用:((我得到一个错误,它是: 脚本错误:Update()不能是协同程序 还有别的想法吗 我制作了一个新场景,并将其命名为“lose”,然后我编写了这个脚本并将其连接到主摄像机: #pragma strict //var loadingBar: Transform; var loading_bar : GameObject;

我想在unity 2d游戏中制作一个加载条,每1秒实例化7个立方体。 我用过:
yield WaitForSeconds(1)
在每个实例化语句之后的函数更新中,但它不起作用:((我得到一个错误,它是:

脚本错误:Update()不能是协同程序

还有别的想法吗

我制作了一个新场景,并将其命名为“lose”,然后我编写了这个脚本并将其连接到主摄像机:

#pragma strict

//var loadingBar: Transform;
var loading_bar : GameObject;

function Update()
{
    Instantiate(loadingBar,Vector3(-1.849,-2.9371,2),Quaternion.identity);

    gameTimer();


    Instantiate(loadingBar,Vector3(-1.2909,-2.937,2),Quaternion.identity);

    gameTimer();

    Instantiate(loadingBar,Vector3(-0.5566,-2.93711,2),Quaternion.identity);

    gameTimer();

    Instantiate(loadingBar,Vector3(0.148236,-2.93711,2),Quaternion.identity);

    gameTimer();

    Instantiate(loadingBar,Vector3(0.823772,-2.93711,2),Quaternion.identity);

    gameTimer();

    Instantiate(loadingBar,Vector3(1.440567,-2.93711,2),Quaternion.identity);

    gameTimer();

    Instantiate(loadingBar,Vector3(2.057361,-2.93711,2),Quaternion.identity);

    loadingTimer();

    Application.LoadLevel(1);
}


function OnGUI()
{
    GUI.color = Color.green;
    GUI.Label(Rect(400,350,500,500),"<color=green><size=100>Lose</size></color>");
}

function loadingTimer()
{
    yield WaitForSeconds(1);
}
#pragma strict
//变量加载条:变换;
变量加载工具栏:游戏对象;
函数更新()
{
实例化(加载条,向量3(-1.849,-2.9371,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(-1.2909,-2.937,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(-0.5566,-2.93711,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(0.148236,-2.93711,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(0.823772,-2.93711,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(1.440567,-2.93711,2),四元数标识);
游戏计时器();
实例化(加载条,向量3(2.057361,-2.93711,2),四元数标识);
加载计时器();
应用程序。加载级别(1);
}
函数OnGUI()
{
GUI.color=color.green;
图形用户界面标签(Rect(400350500500),“丢失”);
}
函数加载计时器()
{
收益等待秒(1);
}

我想让这些立方体以1秒的间隔依次出现,以便 将看起来像一个加载条…

我这样解决了这个问题::

#pragma strict
变量加载条:变换;
var finished:boolean=false;
函数更新()
{
加载计时器();
if(finished==true)
{
应用程序。加载级别(1);
完成=错误;
}
}
函数OnGUI()
{
GUI.color=color.green;
图形用户界面标签(Rect(295320500500),“丢失”);
}
函数加载计时器()
{
实例化(加载条,向量3(-1.9,-2.9371,2),四元数.identity);
收益率等待秒(0.28);
实例化(加载条,向量3(-1.3,-2.937,2),四元数.identity);
收益率等待秒(0.28);
实例化(加载条,向量3(-1.3,-2.937,2),四元数.identity);
收益率等待秒(0.28);
实例化(加载条,向量3(-0.7,-2.93711,2),四元数标识);
收益率等待秒(0.28);
实例化(加载条,向量3(-0.1,-2.93711,2),四元数标识);
收益率等待秒(0.28);
实例化(加载条,向量3(0.5,-2.93711,2),四元数标识);
收益率等待秒(0.28);
实例化(加载条,向量3(1.1,-2.93711,2),四元数标识);
收益率等待秒(0.28);
实例化(加载条,向量3(1.7,-2.93711,2),四元数标识);
完成=正确;
}

首先,您不能在更新函数中使用yield WaitForSeconds。您需要引入IEnumator。在您的情况下,我可以说以下代码可能会对您有所帮助

public class Loader : MonoBehaviour 
{
    public GameObject cube;
    private bool finished = false;
    private Vector3[] positions = new Vector3[7] {new Vector3(-1.849,-2.9371,2), new Vector3(-1.2909,-2.937,2), new Vector3(-0.5566,-2.93711,2),new Vector3(0.148236,-2.93711,2),new Vector3(0.823772,-2.93711,2),new Vector3(1.440567,-2.93711,2),new Vector3(2.057361,-2.93711,2)};
    private int loaderCounter=0;

    void Start () 
    {
        StartCoroutine(StartLoader());
    }

    IEnumerator StartLoader () 
    {
        Instantiate(cube,positions[loaderCounter],Quaternion.identity);
        yield return new WaitForSeconds(1);
        loaderCounter++;
        if(loaderCounter==7)
        {
            finished=true;
        }
        if(!finished)
        {
            StartCoroutine(StartLoader());
        }
        else
        {
            Application.LoadLevel(1);
        }
    }
}

如果在这之后有任何问题,请告诉我。只需使用变量声明的javascript语法。

您不能更改现有方法的返回类型。相反,您需要在Start或Awake方法中启动Start例程,并将IEnumerator定义为MonoBehavior的单独私有函数。

如果您坚持使用要使用ant更新功能,您可以。下面是一个示例:

private float _elapsedTime = 0;
private int counter = 0;
void Update(){
    if(counter < 7){
        if(_elapsedTime >= 1){
            _elapsedTime = 0; //reset it zero again
            _counter++;
            //instantiate the cube, and update the loading bar here
        }else{
            _elapsedTime += Time.deltaTime;
        }
    }
}
private float _elapsedTime=0;
专用整数计数器=0;
无效更新(){
如果(计数器<7){
如果(_elapsedTime>=1){
_elapsedTime=0;//再次将其重置为零
_计数器++;
//实例化多维数据集,并在此处更新加载栏
}否则{
_elapsedTime+=Time.deltaTime;
}
}
}

Answer也更新了..:))逻辑是一样的,只需更改javascript中的语法即可。非常感谢您的帮助。。但是昨天我在看到你的更新之前解决了我的问题。。。我已经更新了我的问题并添加了我的答案,,非常感谢:)调用重复怎么样:
private float _elapsedTime = 0;
private int counter = 0;
void Update(){
    if(counter < 7){
        if(_elapsedTime >= 1){
            _elapsedTime = 0; //reset it zero again
            _counter++;
            //instantiate the cube, and update the loading bar here
        }else{
            _elapsedTime += Time.deltaTime;
        }
    }
}