Gamerch
あかさ

順番の枠組み

最終更新日時 :
1人が閲覧中
作成者: ユーザー98083
最終更新者: ユーザー98083

順番の枠組み

Unityでは通常毎フレームずつ進める。

しかしプログラムが終わると次のプログラムというふうに順番に進めることもできる。


using System;

using System.Collections;

using UnityEngine;

using UnityEngine.UI;

using UnityEngine.SceneManagement;

using System;



public class タイトル:MonoBehaviour


void Start()

{

StartCoroutine(コルーチンプログラム());

}


IEnumerator コルーチンプログラム()

{

Debug.Log("敵が出た");

yield return new WaitForSeconds(2f);

Debug.Log("攻撃");

}

}


説明

コルーチンは別の並行処理として実行される。

startに書くか、フラグをつけてやらないと毎フレーム新しいコルーチン処理が増えていく。

コルーチンは Update を止めない

yield はコルーチンだけを止める


コルーチンの動くプログラム

IEnumerator 1フレームだけ動くコルーチン()

{

A.transform.Translate(方向.normalized * 速度 * Time.deltaTime, Space.World);

}

1フレームだけ動いて終了。



IEnumerator 毎フレーム動くコルーチン()

{

while(true)

{

A.transform.Translate(方向.normalized * 速度 * Time.deltaTime, Space.World);

yield return null;

}

}

毎フレーム Translate が実行される(Update と同じ動き)。

yield return null; を書かないと、

1フレームの中で無限に Translate を実行し続け、Unity が固まる(CPU100%)



IEnumerator 目的座標まで動くコルーチン(Vector3 target)

{

while(Vector3.Distance(A.transform.position, target) > 0.01f)

{

A.transform.Translate(方向.normalized * 速度 * Time.deltaTime, Space.World);

yield return null;

}

}

目的地に着くまで毎フレーム動く。


IEnumerator 3秒動くコルーチン(Vector3 target)

{

float t = 0f;

while (t < 3f)

{

A.transform.Translate(方向.normalized * 速度 * Time.deltaTime, Space.World);

t += Time.deltaTime;

yield return null;

}

}

コメント (順番の枠組み)
  • 総コメント数0
この記事を作った人
やり込み度

Wikiにゲームが紐づいていません

編集者紹介

未登録

注目記事
ページトップへ