i-school - 2Dタワーディフェンス 手順7
 2回に分けて、敵キャラの移動処理を実装します。
この手順では敵キャラ用のゲームオブジェクトの作成と、移動の経路を設定する処理を実装します。

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

手順7 ー敵キャラの作成と移動経路の作成ー
11.敵キャラのゲームオブジェクトを作成する
12.PathData スクリプトを作成し、敵キャラの移動経路を作成・管理する



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

 ・空のゲームオブジェクトの活用例
 ・ゲームオブジェクトのラベル機能



11.敵キャラのゲームオブジェクトを作成する

1.設計


 ゲームの障害物となる敵キャラを製作していきます。
プレイヤー側のキャラを作成した際と同じ手順で作成を行います。

 前回の復習も兼ねて、まずは自分だけで敵キャラを作成してみましょう。


2.Unity に敵キャラの画像をインポートする


 敵キャラとして使用したいキャラの画像ファイルを Unity へインポートしてください。
地形の画像ファイルをダウンロードしたぴぽや様にはキャラの画像ファイルも用意されています。

 インポートの手順や、画像ファイルの分割の手順なども同じです。
前回の手順を参考にしながら作業してください。


フォルダ画像(参考例)




3.ヒエラルキーにキャラを設置する


 画像のフォルダ内にある同じ方向を向いている画像ファイルをまとめて選択します(3〜4ファイル)
まとめて選択する方法は Ctrl キーを押しながら左クリックです。
どの方向を向いている画像ファイルでも構いません。今回は正面を向いている画像ファイルを3つ選択しています。


画像ファイルの選択



選択時のインスペクター画像



 選択したファイルをそのままヒエラルキーにドラッグアンドドロップします。
Create New Animation というウインドウが開きます。


Create New Animation ウインドウ



 Create New Animationウインドウは、作成複数の画像ファイルをヒエラルキーにドラッグアンドドロップすると表示されるウインドウです。
それらの画像を使ったアニメーションを再生する、アニメーションクリップを自動的に作成してくれます。
(複数枚の画像をパラパラ漫画のようにつなぎ合わせて1つのアニメにしています。)

 ファイル名を Enemy_0_front.anim に変更して保存を選択してください。正面以外のアニメの場合には、その方向の名称にしてください。
保存先には Animations のようなフォルダを作成しておいて、その中に保存するようにすると管理しやすくなります。

 ヒエラルキーに画像ファイルの最初のファイル名と同じ名称のゲームオブジェクトが作成されます。
(複数の画像の場合、自動的に先頭のファイル名を持つゲームオブジェクトになります)


 このままですと、キャラが地形のタイルに隠れて見えない状態になってしまうため、
ゲームオブジェクトの設定を行って、画像の描画する優先順位を設定します。


4.Enemy ゲームオブジェクトの設定を行う


 ヒエラルキーのキャラのゲームオブジェクトを選択し、名前を Enemy に変更してください。

 Enemy ゲームオブジェクトの Transform コンポーネントの Position の情報が (0, 0, 0) ではない場合には、(0, 0, 0) に設定してください。

 最後に、Sprite Renderer コンポーネントの Additional Settings 内にある Sorting Layer を選択し
Default を Chara に変更してください。Chara が最も優先順位が高い Sorting Layer の種類であるため、
ゲーム画面での描画の順位が変わり、Enemy ゲームオブジェクトが他のタイルのゲームオブジェクトよりも常に手前に表示されるようになります。


インスペクター画像

 

Scene ビューと Game ビュー画像




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


 セーブを行い、ゲームを実行して処理を確認しましょう。
敵キャラがその場でアニメーションすれば成功です。


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


6.Enemy ゲームオブジェクトをプレファブにする


 Prefabs にヒエラルキーにある Enemy ゲームオブジェクトをドラッグアンドドロップしてプレファブにしてください。

 プレファブになったゲームオブジェクトは、ヒエラルキーでは青い色のアイコンと名前で表示されて区別されます。
次の手順でもまだ Enemy ゲームオブジェクトを利用しますので、まだヒエラルキーの Enemy ゲームオブジェクトは削除せずに残しておいてください。


12.PathData スクリプトを作成し、敵キャラの移動経路を作成・管理する

1.設計


 敵キャラは防衛拠点を目掛けて移動をしてくるという役割がありますので、
設計する際には、それをどのようにすれば実装できるのか、イメージを固めて文字に起こすことが大切です。

<敵キャラに実装するべき機能>
 ・敵キャラを防衛拠点まで、経路に沿って移動させるにはどうすればいいのか
 ・敵キャラが移動する際にアニメーションの向きを移動方向に同期させるにはどうすればいいのか

 以上のような部分を念頭に置きながら、設計を自分で考えてみてください。
教材に囚われることなく、自分で設計と実装が行えるのであれば、そちらを優先してください。

 また、これらの機能は一度にすべてを実装できません
Debug.Log メソッドなども活用しながら、設計を考えて、その順番に組み立てていく手法で進めていきましょう。

 この手順では、作成した敵キャラを経路に沿って移動させるための設計を考えていきます。



 経路を設定する方法はいくつか考えられますが、後々の修正や管理を簡便化するには、
空のゲームオブジェクトを有効に利用していく方法を検討します。

 ヒエラルキーにおいて右クリックしてメニューを開くと Create Empty を選択することによって
Transform コンポーネントの情報だけを持っているゲームオブジェクト、すなわち空のゲームオブジェクトが1つ作成されます。

 こちらのゲームオブジェクトは目に見えませんが、ゲーム内にはちゃんと存在していますので、
このゲームオブジェクトの持つ Transform コンポーネントが管理している位置情報を、経路の1つの地点とします。

 まずはスタート地点を決定します。その地点に、Create Empty で作成した空のゲームオブジェクトを配置します。
あとは、どのような経路にしたいのか、そのイメージに合わせて、ゴール地点まで複数の空のゲームオブジェクトを設置していきます。

 この方法の便利な部分は、Scene ビューにて視覚的に経路の配置が行えることと、位置の修正も、そのまま Sceneビュー で行えることにあります。
また経路を増やしたり減らしたりする場合にも、空のゲームオブジェクトを追加・削除するだけで出来ます

 そして、ゴール地点までに配置した複数の空のゲームオブジェクト群を「経路用のゲームオブジェクト」として扱うようにします。
このゲームオブジェクト群はすべて Transform コンポーネントを持っていますので、その中の Position の値を「行き先」として順番に利用することで経路を作成できます。

 配置が完成したら、この経路用のゲームオブジェクト群を管理するためのクラスを作成して、それに各ゲームオブジェクトを配列として登録して管理させます。
あとはこのクラスの配列よって管理しているすべての経路の情報を、敵キャラ用のクラス内で運用することが出来れば、経路に沿った移動を実装することが出来ます。

 ここまで細かく設計を考えてから、処理の実装を考えていきますプログラムを書くのは一番最後の段階になりますので、
まずはしっかりとどのような機能を実装したいのか、そのためにはどのような処理を組み立てていけばよいのかを作り上げておくことが重要です。

 そういった観点を持ちながら、処理の実装を行うようにしてください。今後自分で処理の設計を行う際の考え方の指針になります。


2.経路用のゲームオブジェクトを作成する


 まずは経路用のゲームオブジェクトを作成する前に、それらを管理するためのゲームオブジェクトを作成しておきます。
ヒエラルキーの空いている場所で右クリックをしてメニューを開き、Create Empty を選択します。
新しくゲームオブジェクトが作成されますので、名前を PathTranSet に変更してください。
このゲームオブジェクトを経路用のゲームオブジェクト群をまとめておくためのフォルダ役として運用します。

 作成したゲームオブジェクトに役割を与えるのは製作者に他なりません
自分で作成したゲームオブジェクトには明確な役割を与えて任務を果たしてもらうようにします。


ヒエラルキー画像





 続いて、PathTranSet ゲームオブジェクトの上で右クリックをしてメニューを開き、Create Empty を選択します。
PathTranSet ゲームオブジェクトの子オブジェクトとして新しくゲームオブジェクトが作成されますので、名前を StartTran に変更します。

 StartTran ゲームオブジェクトは敵の移動を開始するスタート地点と、後で敵をインスタンスする際の生成地点の2つの役割を持ちます。
防衛拠点は右端の予定ですので、スタート地点は、タイルマップ上の左端の任意の位置に設置してください。

 Game ビューを見ながら、ゲーム画面には映らない範囲に設定するのがポイントです。
そうすることで、ゲーム画面外から敵キャラがゲーム内に入ってくる演出が出来ます

 ゲームオブジェクトにラベルを指定しておくと Sceneビュー にゲームオブジェクトの名前が表示されます。
透明で見えないゲームオブジェクトを配置する場合には便利な機能ですので、活用してください。


Scene ビュー画像(Game ビューも見ながら調整する)



インスペクター ラベルの設定(ゲームオブジェクトの名前の左側の部分をクリックで設定可能)




 
 次に、敵が移動した際のゴール地点を作成します。同じように PathTranSet ゲームオブジェクトの上で右クリックをしてメニューを開き、Create Empty を選択します。
PathTranSet ゲームオブジェクトの子オブジェクトとして新しくゲームオブジェクトが作成されますので、名前を GoalTran に変更します。

 このゲームオブジェクトは一旦、画面の右端の中程に設定しておいてください。後で防衛拠点を作成した際に調整します。


Scene ビュー画像





 あとは、スタート地点とゴール地点を結んでいくための経路用のゲームオブジェクトを複数作成します。
今までと同じように PathTranSet ゲームオブジェクトの子オブジェクトとして Create Empty をして作成してください。
名前は PathTran にし、それを ctrl + D キーで複製してください。右クリックのメニューより Duplicate を選択しても複製できます。
複製すると名前が連番で自動的につきますので、その番号を経路の順番として考えると管理がしやすくなります。

 作りやすさ、わかりやすさを念頭に置いておくとゲームの製作も楽になります

 敵キャラの方向を変える(曲がる)タイミングで経路の変更が必要になりますので、自分のイメージしている経路をそのままゲームオブジェクトとして配置してください。
下記の参考例では全部で7個(スタートとゴール入れて9個)ありますが、最初は3〜4個くらいの経路で構いません。


Scene ビュー画像



<手順動画 経路用のゲームオブジェクトを配置する>
動画ファイルへのリンク


 完成したら、これらのゲームオブジェクトをゲーム内で運用していくためのスクリプトを作成します。


3.PathData スクリプトを作成する


 Scripts フォルダ内で右クリックをしてメニューを開き、Create => C# Script を選択します。
新しくスクリプト・ファイルが作成されますので、名前を PathData に変更して処理を記述します。

 記述する内容は変数のみになります。

 1つはあとで利用する敵の生成地点を登録するための変数、もう1つは先ほど作成した経路用のゲームオブジェクト群をまとめて管理するための配列の変数です。


PathData.cs

<= クリックすると開きます。


 スクリプトを作成したらセーブを行います。


4.PathTranSet ゲームオブジェクトに PathData スクリプトをアタッチし、設定を行う


 先ほど作成した PathData スクリプトをドラッグアンドドロップして PathTranSet ゲームオブジェクトにアタッチします。
アタッチしたら必ず、ゲームオブジェクトを選択してインスペクターを確認して、正常にアタッチされているかを目視でチェックします。

 PathData スクリプトにはインスペクターよりアサインする情報が2つ表示されていますので、こちらを設定します。

 GenerateTran 変数には、StartTran ゲームオブジェクトをドラッグアンドドロップしてアサインします。
これはスタート地点の位置情報を参照して、後々に敵の生成地点の情報に利用するためです。

 PathTranArray 変数は配列ですので、スタート地点からゴール地点までの経路数を Size として指定します。
その後、Element が Size 分だけ作成されます。これが配列の中身(要素)となります。こちらには Transform コンポーネントの情報をアサインして変数内に登録できます。

 Element 0 には StartTran ゲームオブジェクトをドラッグアンドドロップしてアサインします。

 Element 1 からは、経路して辿る順番に合わせて各 PathTran ゲームオブジェクトをドラッグアンドドロップしてアサインして設定をしていきます。

 最後の Element には GoalTran ゲームオブジェクトをドラッグアンドドロップしてアサインします。

 この登録した順番が敵の移動する際の経路の情報になります。
インスペクターで経路を設定しているので、配置場所や順番も含めて任意に変更できるのも便利な点です。
順番を間違えないように登録しましょう。もしも順番を変更したい場合にはドラッグアンドドロップで Element の場所を入れ替えることが出来ます。


インスペクター画像





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

 次は 手順8 −敵キャラの移動処理の実装− です。