Unityを使った3Dゲームの作り方(かめくめ)ゲーム開発エンジンUnityを使った3Dゲームの制作に参考になる情報を公開しています。2017.03.13Unityのスクリプトではコルーチンを使う事が出来ます。コルーチンを使うと一定時間毎に何らかの処理を行う事が出来るようになります。1分毎に新しい敵を登場させるといった事が出来ます。Update関数内で時間を計測し時間がきたら敵を登場させる事も出来ますが、コルーチンを使った方が簡単に記述が出来ますし、Update関数内で時間を毎回計測する処理負荷が軽減されるということもあります。このコルーチンは通常のスクリプトの流れから外れて動作するのでスクリプトの流れとは別に動作させたい処理がある時に便利です。いわゆるマルチスレッド(複数のスクリプトを並列に動作させる)ではなくシングルスレッドで動いているけど並列して動いているようにみせる事が出来るという事です。前置きが長くなりましたので、さっそくコルーチンの使い方にいきましょう。コルーチンを開始するまずはコルーチンを開始するやり方です。Test関数が実行する関数です。引数は文字列として渡すStartCoroutine("Test");↑のように最初のコルーチン開始は通常の関数呼び出しと同じやり方ですがこちらはJavaScriptでしか出来ません。2番目はStartCoroutineの引数としてTest関数を渡して実行出来ます。3番目はStartCoroutineの引数としてメソッド名(呼び名が違いますがJavaScriptだと関数名)を渡します。2番目と3番目は同じようですが実は違いがあります。3番目のようにメソッド名を渡して実行した場合StopCoroutineを使って動作を止める事が出来ます。2番目の場合は処理が自然に終了出来るようにするかStartCoroutineの戻り値を変数に保持しておきStopCoroutineを使うか、StopAllCoroutinesが呼ばれるまで止まりません。コルーチンを停止する次はコルーチンの停止方法です。StopAllCoroutineを呼ぶと全てのコルーチンが停止StopAllCoroutines();最初のやり方はコルーチンを開始する時に引数にメソッド名を記述した場合に出来る停止方法です。StartCoroutine(“Test”)としていた場合だけStopCoroutine(“Test”)が作用します。それ以外の方法で開始されたコルーチンには適用されず無視されてしまいます。2番目のStopAllCoroutinesは実行しているコルーチンの関数によらず全てのコルーチンを停止します。ゲームが終了する時は動作しているコルーチンを全部止めたいと思うので名前を指定せずこちらを呼び出して止めた方が早そうですね。--以前StopCoroutineではStartCoroutineの引数に文字列として関数名を渡した時だけ作用すると書きましたが、StartCoroutineの戻り値はCoroutine型であり、スタートさせたコルーチンの参照を保持しておくことも出来るようです。コルーチンを止める時に参照を指定StopCoroutine(c);とStartCoroutineでスタートさせたコルーチンの参照変数を保持しておき、StopCoroutineでその参照変数を使ってコルーチンを止める事が出来ます。指摘されるまで全然気が付きませんでした。m(__)mなお今回のサンプルでは連続してコルーチンを開始させているので開始させる毎に別の参照変数へと入れていかないといけません。--コルーチンの戻り値さて、一番わかり辛いと思うのがコルーチンの戻り値です。戻り値がIEnumerator型という事でチンプンカンプンです・・・・(-_-)ここが特殊で解り辛いところですね・・・、やり方だけ覚えてしまいましょう。さきほどから登場していた実行しているコルーチンTest関数を見ていきます。JavaScriptとC#では記述が少し変わるので両方を載せておきます。JavaScriptまずはJavaScriptでの記述を見てみましょう。次のフレームに飛ばすyield;}JavaScriptでは通常の関数と同じ記述で戻り値を記述しなくて大丈夫です。{としても大丈夫です。yieldという見慣れない記述がありますが、難しい事はわかりません・・・・(^_^;)一旦次のフレームに飛ばすと考えてもらえばいいのかもしれません。WaitForSeconds(1.0f)と記述すると1秒後に次のフレームに飛ばします。yieldだけだとその場で次のフレームに飛ばします。C#次はC#での記述を見てみましょう。WaitForSeconds(1.0f)と記述します。JavaScriptとC#では多少記述が変わっていますね。コルーチンのサンプルを作成するコルーチンの概要を見てもよくわからないと思うので実際にサンプルを作って実行してみましょう。以下のスクリプトを作成しMainCamera等のゲームオブジェクトに取りつけます。ヒエラルキー上で右クリック→UI→Textを作成し、このスクリプトのインスペクタにこのTextを設定します。次のフレームに飛ばすyield;}}Spaceキーを押すとコルーチンをスタートさせます。今回は引数にメソッド名を記述するやり方でやります(他のはコメント化してあります)。1キーを押すと動作しているコルーチンを全部停止させます。その為Test関数以外のコルーチンTester関数を作り実行していたとしても停止します。Testだけを停止するにはStopCoroutine("Test")123StopCoroutine("Test")を使います。実際に動作しているTest関数内を見ていきましょう。次のフレームに飛ばすyield;}}Test内ではローカル変数であるcountを宣言し0で初期化しています。whileループで常に条件がtrueなので繰り返し実行します。WaitForSeconds(1.0f)で1秒待機したあとyieldで次のフレームに飛ばします。その為1秒毎にcountの数字を永遠表示し続ける処理になります。count変数は毎回0に初期化されるような気がしますが、実際はカウントアップされていきます。次のフレームに移動してもwhileループの中にいると考えるといいのかも?このサンプルではSpaceキーを押すたびにコルーチンを開始していますが、そうするとどうなるのでしょうか?実は新しくコルーチンが開始され、前に開始したコルーチンとは別物が動作します。その為Spaceキーを押すたびに新しいコルーチンが開始されコンソールにそれぞれのカウントがされていくことになります。C#サンプル次はC#で記述したスクリプトです。null;}}}書いてある事は同じです。それではサンプルを実行してみましょう。何秒かおきにSpaceキーを押してコルーチンを開始しています。コンソールに違うコルーチンのカウントが表示されていってますね。途中で1キーを押してコルーチンを全て停止し、コンソールのClearボタンを押してコンソールを消しコルーチンが停止している事を確認しています。その後再びSpaceキーを押して新しいコルーチンを開始してます。コルーチンを使ってみて正直なところコルーチンは使い方がわかり辛いので全然使ってなかったんですが、場合によっては非常に便利かもしれませんね。Update関数内で何らかの条件に合致するか判定する場合1秒間に何十回も判定をしてしまいますが、もっと少ない回数で条件を判定したい時はコルーチンを使って自分で指定した秒数毎に条件を判定するようにすれば判定回数が減って処理速度の向上に繋がる可能性があります。コピーかめくめちゃんをフォローする7Unityを使った3Dゲームの作り方(かめくめ)Unityを使った3Dゲームの作り方(かめくめ)関連記事Unity基本情報UnityのOnEnable、OnDisable、OnDestroyメソッドについてUnityのOnEnable、OnDisable、OnDestroyメソッドの実行タイミングについて見ていきます。Unity基本情報Unityのレンダーテクスチャを使って鏡を作成するUnityのレンダーテクスチャを使って鏡の機能を作成していきます。Unity基本情報UnityのCharacterControllerコンポーネントの落とし穴?UnityのCharacterControllerを使ってキャラクターの衝突判定や移動機能を使うと非常に便利ですが、使い方を間違えると原因不明の不具合に悩まされるかもしれません。Unity基本情報UnityのVector3やTransformのStatic変数で方向を取得するUnityのVector3やTransformのVector3.upやtransform.forwardを見ていき、キャラクターからみた方向を計算する方法を学んでいきます。Tutorialsをやってみました。Detail)を使ってハードウェアの負荷を軽減させ、レンダリング性能を向上させるUnityで衝撃波を飛ばして敵を倒すUnityでNowLoading画面を作成するホームUnity基本情報スポンサーリンクサイト内検索が出来ますプロフィール管理人のかめくめちゃんです。(-_-)メールはこちらにお願いします(記事に関する質問は送らないでください、返信は期待しないでください(._.))。kamekumechan@gmail.comいずれはSIRENやバイオハザードみたいなアクションゲームを作りたいと思っています。ゲームシナリオが書けないので面白いゲームはなかなか作れません・・・・。(^_^;)名前の由来はカメが好きだからです。プロフィールになってないな・・・・(-.-)Unityをこれから始める人へこれからUnityを使ってみようという方はUnityを使った3Dゲームの作り方(かめくめ)の歩き方Unityを使った3Dゲームの作り方(かめくめ)で、はじめてUnityの学習をする時の当ブログの記事を読む順番を書きました。機能を積み上げていく形になるので便利かも?gametukurikata.com2019.06.21の記事に記載の順番で見て頂くとUnityの基本的な使い方がわかり、簡単なアクションゲームや、TPSゲームの作成までが出来ます。自作タイピングゲームタイピングゲームを作りました。WebGL形式なのでPCのブラウザで遊べます。以下からプレイ出来ます。FinalTypingUnityを使って作成したローマ字入力のタイピングゲームです。gametukurikata.com2022.01.02お知らせ2023/01/24個人的にUnity2022.2.3f1をインストールしました。2022/10/14UnityのIKを使って足の位置と角度を地面に合わせる機能Unityのゲームでキャラクターの両足が別の高さの地面の上にある時にそれぞれの足をそれぞれの地面につけるようにする機能を作成しますgametukurikata.com2016.04.11機能を少し修正しました。2020/09/19コメント欄は閉鎖しました。今までコメントを投稿してくださった方はありがとうございました。(^^)/2018/08/07わたくしに出来る事は既に記事にしてあるので、ブログ右上の検索窓を活用してください。(._.)またブログの最初の方の機能を積み上げていく記事に関しての疑問点は当ブログ記事のスクリプトの説明と寄せられた質問への回答Unityを使った3Dゲームの作り方(かめくめ)の機能積み上げ形式の記事のスクリプトの説明と寄せられた記事の機能についての質問への回答を掲載しています。gametukurikata.com2019.08.01Unityを使い始めたばかりの人がつまづきやすい点を解消するUnityを使い始めたばかりの人が結構な確率で陥る不具合や疑問点を解消していきます。基本的にはブログに寄せられた質問への回答という感じです。gametukurikata.com2018.12.04も参照してみてください。小・中学生によるデジタルコンテンツ開発の全国大会ですuycc.unity3d.jp2022年大会の先行エントリーが開始されているようです。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。当ブログはハイスピードプランです。WordPressの編集画面の動作が早くなった。記事の内容に質問がある方へUnityを使った3Dゲームの作り方(かめくめ)の歩き方UnityのJavaScriptとC#を読み替えてどちらでも対応出来るようにするホーム検索トップサイドバータイトルとURLをコピーしました。