2

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);
}

ここに画像の説明を入力

これらの立方体が 1 秒ごとに次々に表示されるようにして、読み込みバーのように見えるようにします...

私はこの方法でこの問題を解決しました::

#pragma strict

var loadingBar: Transform;
var finished : boolean = false;

function Update()
{
    loadingTimer();

    if (finished == true)
    {
        Application.LoadLevel(1);
        finished= false;
    }
}


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

}


function loadingTimer()
{
    Instantiate(loadingBar,Vector3(-1.9,-2.9371,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(-1.3,-2.937,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(-1.3,-2.937,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(-0.7,-2.93711,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(-0.1,-2.93711,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(0.5,-2.93711,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(1.1,-2.93711,2),Quaternion.identity);
    yield WaitForSeconds(0.28);
    Instantiate(loadingBar,Vector3(1.7,-2.93711,2),Quaternion.identity);

    finished= true;
}
4

3 に答える 3

12

まず、 Update 関数で 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 構文を使用するだけです。

于 2013-10-03T10:54:00.363 に答える
2

更新機能を使いたいと主張するなら、そうすることができます。これを行う方法の一例を次に示します。

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;
        }
    }
}
于 2013-10-04T03:43:21.150 に答える