ユニティちゃんのRPGを作ってみよう15ーワールドマップで敵に遭遇するー | Unityを使った3Dゲームの作り方(かめくめ)

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

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

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

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

ユニティちゃんの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スクリプトのSceneTypeにWorldMapToBattleを追加します。

Battleシーンの作成と設定

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

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

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

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

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

上のようになりました。

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

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

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

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

スポンサーリンク

記事をシェアして頂ける方はこちら

フォローして頂くとやる気が出ます