前回の記事ではローグライクのプレイヤーキャラクターを作成し、マップ上で自由に移動できるようにしました。
前回の記事:
今回の記事では敵オブジェクトを作成し、プレイヤーと同じようにマップ上に登場させてみましょう!
敵オブジェクト用のプレハブを作成する
先に敵を表すプレハブを作成します。次の手順を行ってください。
- メニューから空のGameObjectを作成し、名前を「EnemyPrefab」にしてください。
- メニューのGameObject > 3DObject > Sphereをクリックし、GameObjectを作成してください。名前は「Model」にしてください。
- 作成した「Model」は「EnemyPrefab」の子GameObjectにしてください。
- 「Model」の形状は好きなものでOKです。
- ※お好みで好きなマテリアルを設定するのもいいでしょう。
(「Model」は表示するモデルの位置調節に使用します。)
ここまでできたら、シーンの上の「EnemyPrefab」をプレハブ化してください。プレハブ化した後はシーンにある「EnemyPrefab」は削除してください。
マップデータに敵の位置情報を組み込む
敵オブジェクトの素材ができたので、次はマップデータに敵を組み込んでいきましょう!
シーンに存在する「Map」コンポーネントの「massDataList」フィールドに次の内容を追加してください。
修正内容は単純に既存データに敵のデータを追加しただけになります。
追加する際は必ず先にMassType列挙型にEnemyを追加してください。
1 2 3 4 |
public enum MassType { //.. Enemy, } |
1 2 3 4 5 6 |
//敵 prefab = 「EnemyPrefab」プレハブを設定 type = MassType.Enemy; mapChar = ‘E’; isRoad = false; isCharacter = true; |
マップデータに敵を組み込んだので、次は敵の行動パターンを実装するためのC#スクリプトを作成しましょう!
敵のスクリプトの名前は「Enemy」にしてください。
「Enemy」スクリプトは「MapObjectBase」の派生クラスにしてください。
1 2 3 4 5 6 7 8 |
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.Linq; class Enemy : MapObjectBase { } |
「Enemy」スクリプトを作成したら、「Enemy」プレハブにアタッチしてEnemyコンポーネントを作成しましょう。
ここまでできたら、再生時に敵が配置されるようになります。
適当にマップに敵を配置して確認してみましょう!
この記事ではマップデータを次のように変更しています。
1 2 3 4 5 6 |
//MapSceneManagerコンポーネントのMapDataフィールド 000P 0+++ 0E00 +++0 G000 |
ちなみに敵のいる場所に移動しようとしても移動できない状態になっているので、そちらも確認してみましょう。
敵を移動させる処理の作成 ターン制システムの導入
次に敵を移動させてみましょう!
敵はプレイヤーが移動した後に移動するようにします。
まとめ
今回の記事では敵オブジェクトとその動作を記述したスクリプトを作成しました。
また、敵はプレイヤーと交互に行動してマップ上を移動してくるようにしました。
次の記事では敵がプレイヤー視認したら追いかけてくるようにするために「Enemy」スクリプトを拡張していきます。
また、色々な敵のバリエーションを増やす際も「Enemy」コンポーネントから派生させることで過去に作成したメソッド等を使い回すことができます。
この記事をまとめると以下のようになります。
- 敵のプレハブを作成
- マップデータへ敵のデータを組み込んだ。
- 敵がマップ内を移動できるようにした。
- プレイヤーと敵のターン制行動システムの基本を導入した。
それでは次の記事に行ってみましょう。
コメント
このページ(作り方3)と作り方5に何か所かMapCharacterBaseとありますがMapObjectBaseの間違いではないかと思いました。
まだまだ勉強不足なので無知による勘違いだとしたら失礼いたしました。
コメントありがとうございます。
こちら、ご指摘の通りMapObjectBaseが正しいです。
執筆当初CharacterBaseという名前を使っていたため一部残ってしまっておりました。
訂正させていただきました。