ユニティちゃんのRPGを作ってみよう15ーワールドマップで敵に遭遇するー

記事内に広告が含まれています。

今回はワールドマップをユニティちゃんが歩いている時に敵と遭遇するという機能を作成していきたいと思います。

前回はユニティちゃんが動いていない時にパーティーメンバーのステータスを表示する機能を作成しました。

ユニティちゃんのRPGを作ってみよう14ー動いていない時にHPやMPを表示するー
ユニティちゃんのRPGでユニティちゃんを動かしていない時にパーティーのHPやMPを表示するパネルを開くようにし、ユニティちゃんが動いたらそのパネルを閉じるような機能を作成していきます。

ユニティちゃんのRPGを作ってみようの他の記事は

ユニティちゃんのRPGを作ってみよう
ユニティちゃんのRPGを徐々に作っていくカテゴリです。

から見ることが出来ます。

以前、ワールドマップ上に敵キャラクターを配置しておき、敵と接触したら戦闘シーンに移動するという機能を作成しました。

UnityのRPGでワールドマップから戦闘シーンへの遷移を作成する
UnityのRPGゲームでワールドマップから戦闘シーンへの遷移を作成し、シーンを移動した時のデータはScriptableObjectで作成しデータを共有できるようにします。

その時は敵を予め配置しておくという事をやりましたが、今回はワールドマップに敵キャラクターを置かずにスクリプトでエンカウント機能(敵と遭遇する機能)を作成したいと思います。

今回やる事は一定時間内のランダムな時間を設定し、ユニティちゃんが歩いている時だけ時間を計測しその時間になったら敵と遭遇するようにするという機能だけを作ります。

敵と遭遇したら敵との戦闘シーンへと移行しますが、戦闘シーンに関しては次の記事以降で作成していきます。

スポンサーリンク

WorldMapシーンにエンカウント機能を取り付ける

WorldMapシーンを開きヒエラルキー上で右クリックしてCreate Emptyを選択し、名前をEncountManagerとします。

Assets/RPG/Scriptsフォルダ内に新しくEncountManagerスクリプトを作成し、EncountManagerゲームオブジェクトにドラッグ&ドロップして取り付けます。

EncountManagerスクリプトは非常にシンプルでインスペクタでencountMinTime(最小時間)とencountMaxTime(最大時間)を設定出来るようにしています。

SetDestinationTimeメソッドが呼ばれるとRandom.Rangeメソッドを使ってencountMinTimeとencountMaxTimeの間でランダムな値を取得し、その時間をdestinationTimeに入れます。

UpdateメソッドではMathf.Approximatelyを使って移動値が0に限りなく近い場合はそれ以降の処理は何もしません。

またユニティちゃんが何らかの行動、例えばアイテムを使用しようとコマンド画面を開いている時等は時間計測をしないようにします。

それ以外の時はelapsedTimeに時間を足していき、目的の時間を越えたらLoadSceneManagerのGoToNextSceneメソッドを呼び出し戦闘シーンへと遷移させます。

SceneMovementDataスクリプトに追記する

SceneMovementDataスクリプトのSceneTypeにWorldMapToBattleを追加します。

また、FadeAndLoadSceneメソッドでSceneTypeがWorldMapToBattleの時にBattleシーンへと遷移する処理を追加します。

Battleシーンの作成と設定

敵と遭遇したら戦闘シーンへと遷移させるようにスクリプトを作ったのでAssets/RPG/Scenesフォルダに新しくBattleシーンを作成します。

Battleシーンを作成したらUnityメニューのFile→Build SettingsにBattleシーンをドラッグ&ドロップして登録しておきます。

ユニティちゃんRPGのBattleシーンをBuild Settingsで追加する

ワールドマップから戦闘シーンへの遷移を確認する

機能が出来たので、ワールドマップでユニティちゃんを動かして敵と遭遇し、Battleシーンへと遷移するかどうかを確認します。

上のようになりました。

シーンの遷移は以前作成した村→ワールドマップ、ワールドマップ→村の遷移の時と同じように画像の透明度を操作したフェードを行っています。

戦闘シーンに遷移する時だけは別のフェードを使いたいので、それはまた別の記事で作ります。

ユニティちゃんライセンス

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

タイトルとURLをコピーしました