Unityに関連する記事です

 3つ目のエネミーの移動方法として、ボスの移動の処理を実装します。


<実装動画 .椒垢上から降りてきて、右側に移動する>
動画ファイルへのリンク


<実装動画◆ ̄βΔら左側に移動し、左側から真ん中に戻ってきて待機。再度右側へ移動開始。この動きをループさせる>
動画ファイルへのリンク


 以下の内容で順番に実装を進めていきます。

発展10 −エネミーの移動方法に合わせた移動処理の実装◆
19.EnemyController スクリプトを修正し、エネミーの種類に応じた移動方法を作成し、制御を追加する ーボス・水平移動 
20.EnemyController スクリプトを修正し、エネミーの種類に応じた移動方法を作成し、制御を追加するぁ 璽椒后水平移動◆



 新しい学習内容は、以下の通りです。

 ・DOTweenの補間機能と実装例Α OnComplete メソッドー
 ・DOTweenの補間機能と実装例А Sequence 機能、Append メソッド、AppendInterval メソッドー



19.EnemyController スクリプトを修正し、エネミーの種類に応じた移動方法を作成し、制御を追加する ーボス・水平移動 

1.設計


 ボスの移動ロジックを考えて、設計を行い実装していきます。

 今回のボスの移動方法については次のような設計を考えました。
これは一例ですので、他の設計をして、自分の考えているように変更していただいても構いません。

<ボスの移動>
◇1.画面の上方向から下方向へ直進移動し、一定の位置で停止する
 2.停止後、画面の右端に向かって等速で移動する
 3.画面の右端に到達したら、次は、画面の左端へ向かって等速で移動する
 4.画面の左端に到達したら、次は、画面の真ん中【1】の地点に向かって等速で移動する
 5.画面の真ん中【1】の地点に到達したら、一定時間待機する
 6.【2】〜【5】の処理を無制限にループする

 まずは最初のロジックとして、【◇1】の部分を考えてみます。
【2】以降については次の手順で実装を行いますが、その前提となる処理を用意します。

 頭の中でイメージを作ることが大切です。その後、実装動画を確認してみてください。
イメージ通りであったならば、それは実装する際に非常に役立ちます。


2.EnemyController スクリプトを修正する


 SetUpEnemy メソッドでボスの場合だけ移動方法を設定している部分がありますので、こちらを削除してください。

 そして他の移動方法と同じように、MoveType による分岐を用意し、その中でボス移動用のメソッドを実行するようにします。
処理の実装内容としては、いままでの移動方法の追加と同じです。


EnemyController.cs


 スクリプトを修正したらセーブします。


3.<DOTweenの補間機能と実装例Α OnComplete メソッドー>


 OnComplete メソッドも SetLoops メソッドや SetEase メソッドと同じように、メインとなる他の DOTween メソッドに付随する処理です。

 この処理はコールバック処理になっており、一緒に処理しているメインのメソッドの処理の終了を待ちます
その処理が終了してから、この OnComplete メソッドの中に記述した処理を実行してくれます。

 今回は DOLocalMoveY メソッドによって transform コンポーネントの Y 軸の値が -500 に変更された後に、この OnCompleteメソッドの処理が実行されるようになっています。
OnComplete メソッドには Debug.Log メソッド処理が記述されていますので、これらの処理は、DOLocalMoveY メソッドの処理が終わるのを待った後に自動的に実行されます。

  transform.DOLocalMoveY(-500, 3.0f).OnComplete(() => {

            Debug.Log("水平移動を実行する");
        });


 1行でも書くことは出来ますが読みにくく長くなってしまうため、可読性を高めるためにも複数行に渡って処理を書いています。
こういった配慮もスクリプトを記述する際には必要ですので、可読性の高い処理を書けるように心がけてください。


4.ゲームを実行して動作を確認する


 それではまず、OnComplete メソッドの動作を確認しましょう。
ボスが -500 の位置に移動するまでに 3 秒かかって移動するように制御をしていますので、
その移動処理の後に OnComplete メソッドが実行されて、Console ビューに Debug.Log メソッドの文字が表示されます。


<実装動画>
動画ファイルへのリンク


 以上のことから、どのタイミングで OnComplete メソッドが実行されるか確認することが出来ます。
何回か実行して確認してみてください。

 しっかりと理解してから次の手順へと進みましょう。



20.EnemyController スクリプトを修正し、エネミーの種類に応じた移動方法を作成し、制御を追加するぁ 璽椒后水平移動◆

1.設計


 OnComplete メソッドの利用方法を理解したら、次は、残る移動の制御を実装していきます。
ロジックとしては、画面の上から一定の位置まで移動を行う部分まで完成していますので、
残りの移動を順番通りに動くようにすることを考えます。

 もう一度、ボスの移動のロジックを確認しましょう。

<ボスの移動>
〇1.画面の上方向から下方向へ直進移動し、一定の位置で停止する
 2.停止後、画面の右端に向かって等速で移動する
 3.画面の右端に到達したら、次は、画面の左端へ向かって等速で移動する
 4.画面の左端に到達したら、次は、画面の真ん中【1】の地点に向かって等速で移動する
 5.画面の真ん中【1】の地点に到達したら、一定時間待機する
 6.【2】〜【5】の処理を無制限にループする

 【〇1】が実装終了している部分です。そして、【2】〜【6】までの処理が、現在 Debug.Log メソッドがある
OnComplete メソッドの中に記述する処理になります。



 この移動の処理を1つずつ、順番にどうすれば実装できるのか、ロジックを考えてみてください。
DOTween を利用していただいてもらって構いません。

 そのイメージで実装するにはどうするのか、考えていきます。



 前提として、プログラムは上から下へ実行されます。
そのため、前の処理が DOTween のように、何秒かけて処理をする、という非同期の処理である場合、
次の処理は前の処理の終了を待つことは出来ません

 つまり、【2】以降のプログラムを1つずつ処理とした書いた場合、1つの移動が終わってから次の移動、という処理ではなく、
1つの移動処理を実行している間に次の処理が実行されることになるので、移動方法が複数相まってぐちゃぐちゃになります。
つまり、通常のプログラムの記述のみでは、このような、前の処理を待ってから次の処理を実行する、という処理は実装できないことになります。



 1つの解決方法として、DOTween には、Sequence(シーケンス)という機能があります。
これは複数の DOTween の処理をプログラムとして記述した順番通りに実行してくれる機能です。

 ポイントとしては、この Sequence 機能の持つ Append メソッドを利用すると、
Append メソッドで実行している処理が終了するのを待ってから、次の Append メソッドを実行するという処理が実装出来ます。

 つまり、【2】の右へ移動後、【3】の左へ移動、という処理を、その手順通りかつ、ちゃんと右へ移動するのを終了してから
左へ移動の処理を行うように制御してくれます。

 今回はこの Sequence 機能が持つ Append メソッドと、一定時間処理を待機するという AppendInterval メソッドを組み合わせて、
それらの処理の最後に SetLoops メソッドを利用してループ処理を追加することにより、ボスの移動を一定の法則に則ってループ制御するようにします。


2.EnemyController スクリプトを修正する


 修正箇所はボスの移動処理の記述されているメソッド内にある OnComplete メソッド内です。
こちらの Debug.Log メソッドを削除して、実際の処理を記述します。

 移動の処理と対応するように【1】〜【6】の番号を追記してありますので、
考えたロジック通りなっているかを確認しておきましょう。


EnemyController.cs


 スクリプトを修正したらセーブします。


3.<DOTweenの補間機能と実装例А Sequence 機能、Append メソッド、AppendInterval メソッドー>


 今回利用しているメソッドについて説明します。
Sequence(シーケンス)処理

 DoTweenによる補間処理をSequenceを利用して実装しています。
Sequenceを利用することで、DoTweenの処理を自分の組み立てた順番通り、あるいは同時に実行することができます。
 
 Sequenceを利用するためには、宣言をして初期化する必要があります。

  // DOTween の Sequence を宣言して利用できるようにする
  Sequence sequence = DOTween.Sequence();

 Sequenceには様々なメソッドがありますが、今回利用しているメソッドを説明します。


 1.Append() 
   アペンドと読みます。引数に指定した処理を行います。引数には通常の DOTween の処理を記述します。
   次にあるメソッドが Sequenc eの Append メソッドである場合、この処理が終了するまで次の Append メソッドは動きません。


 2.AppendInterval() 
   アペンド・インターバルと読みます。Append メソッドと一緒に用いられます。Append メソッドの次のメソッドが AppendInterval メソッドである場合
  Append メソッドが終了したあとに、引数で指定した秒数だけ待機する処理が実行されます。



 多くの方がわかりやすい記事を書かれていますので参考にしてください。
@kagigi様
DOTweenをふわっとまとめてみた
https://qiita.com/kagigi/items/bdf4d42835add07b007...
アマガミナブログ様
DOTweenの使い方 Tweenアニメーション入門【Unity】
https://amagamina.jp/how-to-dotween/


4.ゲームを実行して動作を確認する


 OnComplete メソッド内の処理が、【1】〜【5】まで順番通りに、1つずつ実行されて移動を制御できているか確認します。
その後、【6】のループ処理が実行されて、【2】〜【5】までをずっと繰り返し続けていくかを確認してください。


<実装動画 .椒垢上から降りてきて、右側に移動する>
動画ファイルへのリンク


<実装動画◆ ̄βΔら左側に移動し、左側から真ん中に戻ってきて待機。再度右側へ移動開始。この動きをループさせる>
動画ファイルへのリンク


 以上でこの手順は終了です。

 次は 発展11 −エネミーの移動用のスクリプタブル・オブジェクトの作成と運用− です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます