コルーチンが分からない・・・
Unityで分からないことがあると
朝から晩まで考えてしまうタイプです・・・
できるだけはやく、より深く理解したいですよね。
そんな悩めるUnityユーザーの助けになれば嬉しいです。
コルーチンでできることは「一時停止と再開」です。
この記事を読むと・・・
コルーチンについて「使える」レベルになること間違いなし。
「使える」レベルを目指してオリジナルゲームを使った動画とスクリプトの徹底解説を書いていきます。
モヤモヤの解決と「分かる!」をお届けします。
コルーチンを学ぶことでゲーム開発の幅が広がり、ゲームの完成へ近づくことができます。
たくちん
- 未経験でも他業種でも「できる」ゲームの作り方を発信中
- 2歳の娘に挑戦する父ちゃんの背中をみて育ってほしい
- 娘と一緒に遊べるゲームを!と制作開始→苦労はあったが完成
新しいゲームも作ったよ!(えっへん)
iPhoneアプリとしてリリースもできました!
ひらがなーず~ひらがなあどべんちゃあ~
無料 posted withアプリーチ
せっかく始めたゲーム開発・・・。
挫折してしまうのはもったいない!
朝起きたら、ゲーム開発に関する知識詰め込まれてないかな・・・なんて。
アンケートで分かった「稼ぐこと」ができた学習方法をまとめました。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
コルーチンは何に使う?
キャラクターが動いた後〇〇する、〇〇には秒数やマウスをクリックしたら・・・などが入れられます。
コルーチンとは「一時停止と再開」をコントロールするスクリプトのことです。
Unityには「〇〇秒待つ」というスクリプトがありません。
そのため、一旦処理を中断→〇〇秒たったら再開とスクリプトを入力する必要があります。
イメージしやすいよう具体例を動画で解説します。
爆弾が左右からランダムで〇〇秒ごとにでてくるというスクリプトです。
コルーチンを利用して作成しました。
いろんなところからでてきたほうが面白いなと。
そこでランダムになるようスクリプトをいれました。
ランダムについてマスターしたい方はこちらから。
コルーチン実行のスクリプト解説
public class Spawncfg : MonoBehaviour
{
public GameObject boom;
// Start is called before the first frame update
void Start()
{
StartCoroutine(bakudan());
}
IEnumerator bakudan()
{
yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
while (true)
{
float y = Random.Range(-4.5f, 4.5f); //-4.5から4.5の間でランダム
int direction = Random.Range(0, 2);//0か1かランダム
if (direction == 0)
{ //右から出現
boom.transform.position = new Vector3(3.0f, y, 0);
}
else
{ //左から出現
boom.transform.position = new Vector3(-3.0f, y, 0);
}
Instantiate(boom);
yield return new WaitForSeconds(1.5f);
}
}
- startcoroutine(bakudan());
コルーチンをスタートするためのスクリプト。
- IEnumerator bakudan()
コルーチンの中で何を実行するかを決める。
- yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
- yield return :コルーチン内の処理を一時停止し処理を中断します。
- new WaitUntil(() => Input.GetMouseButtonDown(0));マウスをクリックしたら処理を再開します。
組み合わせて【ボタン(マウス)を押したら先へ進む】となります。
- while (true)
- 無限ループさせるためのスクリプト。
解除されるまでこのあとのスクリプトが続きます。
ここからランダム作成のスクリプトで解説済。
割愛します。
お手数ですが関連記事からご確認を。
・・・
コルーチンの部分に戻ってきました。
- Instantiate(boom);
boomを生成するためのスクリプト。
- yield return new WaitForSeconds(1.5f);
- yield return:コルーチン内の処理を一時停止し処理を中断します。
- new WaitForSeconds(1.5f); 新たに秒数(1.5秒)を数えたあとに次のスクリプトを実行。
この場合はwhile (true)へ戻ります。(無限ループ)
コルーチンを生成するためのポイントは次見出しで解説します。
コルーチンを生成するためのポイント
なんとなくスクリプトの意味はわかったけど組み合わせ方が分からない・・・
ポイントがあります。
コルーチンにとって重要な部分がどれか分かれば、組み合わせも大丈夫。
ポイントとなる部分はこちら。
- IEnumerator(何を実行するのか決める)
- yield return(1つ以上必要)
- wait for seconds(秒数を管理)
IEnumerator(何を実行するか決める)
コルーチンとセットで使われるIEnumerator。(読みはアイイニューマレイター)
読みは覚えなくても大丈夫ですが
コルーチンを使う時はセットで使うことが多いです。
先頭に書くことで戻り値として設定ができます。
- IEnumerator bakudan()
この部分ですね。
IEnumerator に続くのは任意の単語で大丈夫。(bakudanのセンスの無さよ・・・)
yield return(1つ以上必要)
yield returnは必ず1つ以上必要です。(読みはイールドリターン)
コルーチンの一時停止処理と再開処理を担っています。
- yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
この部分です。
マウスのボタンをクリックするまで停止・クリックされたら次のスクリプトへとなります。
wait for seconds(秒数を管理)
- yield return new WaitForSeconds(1.5f);
秒数を管理するためのスクリプトです。
(1.5f)の数字を大きくすると再開するまでの時間が長くなります。
基本のコルーチン生成はこれで問題ないかと思います。
実際にコードを書いてお試しください。
コルーチンを応用しよう
ここからは応用編です。
そんなことできたのか。と後から気づいたことを書いていきます。
できることが広がるとゲーム開発に幅が生まれます。
より楽しでもらえるゲームを作るために頑張りましょう。
- コルーチンのループ
- コルーチンの停止(秒数で停止)
- コルーチンの停止(回数で停止)
コルーチンをループさせたい
- while (true)
後に続くスクリプトをループさせることができます。
今回のスクリプトは生成(Instantiate(boom);)した後、1.5秒待機してwhile (true)に戻ります。(無限ループ)
無限ループと聞くと止まらなくなったら・・・と怖い気もしませんか?
コルーチンを止める方法もご紹介します。
コルーチン止めるには?
一連の動作をした後に途中で止める方法と何周回ったら止めるなどコントロールすることができます。
今回のスクリプトには入っていませんが
追加して動画を撮ってみました。
秒数で止める(StopCoroutine)
public class Spawncfg : MonoBehaviour
{
public GameObject boom;
private Coroutine bakudanCoroutine;
// Start is called before the first frame update
void Start()
{
bakudanCoroutine = StartCoroutine(bakudan());
}
IEnumerator bakudan()
{
while (true)
{
yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
Instantiate(boom);
yield return new WaitForSeconds(3f);
StopCoroutine(bakudanCoroutine);
}
}
}
3秒たったら止めるコルーチンです。
- StopCoroutine(coroutine);
こちらのスクリプトで停止しています。
なお、停止したスクリプトを再開させることはできません。
あらかじめご注意を。
回数で止める(yield break)
IEnumerator bakudan()
{
yield return new WaitUntil(() => Input.GetMouseButtonDown(0));
int i = 0;
while (true)
{
if (i > 4) yield break;
i = i +1;
Instantiate(boom);
yield return new WaitForSeconds(1.5f);
}
}
5周スクリプトが回ったらコルーチンが停止して生成しなくなります。
個数限定のレアアイテムの生成などの数をコントロールできますね。
\ゲーム開発ができる「引き出し」が無限に!/
ゲーム開発ができる世界へワープしませんか?
まとめ コルーチンを使いこなしてゲームを充実させよう
コルーチンについて理解を深めることができましたか?
基本的な使い方から繰り返し使う方法をまとめました。
一度読むだけでは分かりにくいところもあるかと思います。
手を動かしながら自分の技術へ変換していきましょう。
これでやりたいことが実装できる!
とゲーム開発が進むことを願っております。
ゲームの作り方総集編!
11ステップであなたもゲームが作れる。喜んでもらえる。
未経験からでも、分かる!が積み上がりゲームを完成できる。
詳細はこちらから。
コメント