【Unity】3DダンジョンRPGの作り方 第12回|エンカウントとレベルアップシステムの実装 | Unity入門の森 ゲームの作り方

【Unity】3DダンジョンRPGの作り方 第12回|エンカウントとレベルアップシステムの実装

Unity 3DダンジョンRPGの作り方 ~世界樹・ウィザードリィ風ゲームを作ろう~

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第12回目になります。

前回は街シーンを編集し、キャラクターの作成や編成の変更を行えるようにしました。

前回の記事:

【Unity】3DダンジョンRPGの作り方 第11回|職業選択・編成システムの機能実装
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第11回目になります。前回から引き続きタウンシーンの開発を進めます。今回はスクリプトを作成してキャラクター作成・編成のシステムやシーン遷移を実装します。前回の記事...

今回はダンジョンシーンを編集し、ダンジョン内を歩くと戦闘が発生し、戦闘に勝利すれば再びダンジョン探索に戻れるというするとエンカウントシステムを実装します。

【ゲームの作り方講座プレゼント中!】

Unityでバトルシーンを読み込みランダムエンカウントを実装する方法

バトルシーンの呼び出しについて

前回の記事でSceneManagerのLoadSceneを用いたシーン遷移を学びましたが、このメソッドは「現在のシーンを終了して新しいシーンを読み込み、アクティブにする」という動作になっています。

今回もそのメソッドを使用しても問題はないのですが、新しい学びとしてここでは「LoadSceneAsyncを用いた非同期でのシーン読み込み」を利用してみましょう。

このメソッドはLoadSceneと違って呼び出してもすぐにシーンが切り替わるわけではありません。代わりにシーンの読み込み状況を管理するためのAsyncOperationという情報を返します。

このAsyncOperationが持つprogressという値(0.0~1.0)を確認することで「今、読み込みが何パーセント完了したか」を知ることができます。またisDoneという値がtrueになれば、読み込みが完了した合図になります。

LoadSceneAsyncによるシーンの読み込みが完了したら、続けてSceneManagerのSetActiveSceneメソッドを呼び出せばそのシーンをアクティブにすることができます。

 

この方法では2つのシーンを同時に開き続けることができるという特徴があります。

今回のゲームでは「バトルシーンの背景は直前まで探索していたダンジョンシーンの画面を使用する」という形でそれを活かしています。

 

また今回は作成しませんが、この機能によってシーンの読み込み中にローディング画面を重ねて表示させることも可能です。

戦闘開始フェードイン・フェードアウト用UI作成

戦闘の開始時にはフェードインによって画面を任意の単色で少しずつ埋め尽くした後にそれを少しずつ元に戻すフェードアウトの演出をセットで行います。これは戦闘終了時にも行います。

シーンの切り替わりをまたいだ演出になるのでDataManagerプレハブ以下にフェード用のUIオブジェクトを作成するのが良いでしょう。

 

よってまずはDataManagerプレハブの編集画面を開き、子にCanvasオブジェクトのBattleTransitionFadeを作成します。

CanvasコンポーネントのSort Orderには適当に大きい値を入力しておきます。この値は他のCanvasと同時に表示するとき、どちらがより手前に表示させるかを決めるためのもので、数字が大きいものがより手前に表示されます。

そしてさらに子オブジェクトとしてImageオブジェクトのFadePanelを作成します。これがフェード処理中に表示される単色の画像になります。

画面全体を覆うサイズにし、初期値で色の非透明度は0.0にしておきます。またRaycast Targetもオフにします。(でないと他のボタンなどへのクリックが阻害されます。)

バトルシーン読み込み・フェード処理

バトルシーンの読み込みおよび終了、フェード処理を行うBattleSceneLoaderクラスをScripts>Utilitiesフォルダに作成します。これはDataクラスが参照を得る形にします。

BattleSceneLoader.cs (新規)

シーンの読み込みやフェード時に非同期処理を用いています。これまで非同期処理にはDOTweenを用いてきましたが、今回はIEnumerator(コルーチン)を用いての実装です。

コルーチンはyield文によって処理のタイミングを細かく指定できるのがポイントです。

  • yield return null : 次のフレームまで処理を中断
  • yield return WaitForSeconds(秒数) : 指定秒数が経過するまで処理を中断
  • yield return (他のコルーチン) : 指定したコルーチンが完了するまで処理を中断
  • yield break : コルーチンを終了

シーンの読み込み中はいつそれが終了するか分からないため、yield return nullによって毎フレーム確認するのが便利です。

 

なお新しくコルーチンを実行する時は基本的にStartCoroutineメソッドが必要になります。(この次で使用します。)

DungeonManager.cs

戦闘が始まるときにはダンジョンシーン上の余計なUIを非表示にし、StartCoroutineメソッドを介してStartBattleを呼び出します。
(StartBattleメソッドはIEnumeratorを返す設計図のようなものです。実際にこの処理を非同期で実行させるためにMonoBehaviourが持つStartCoroutineメソッドに渡してあげる必要があります。)

なお実際のゲームでは「歩いているといつかザコ敵とエンカウントする」するシステムにしますが、今は動作確認用としてSpaceキーを押したら即座に戦闘が始まるようにします。

よってUpdate内にその処理を追加しますが、この機能はあくまでもデバッグ用でありUnityエディタ上でのテストプレイ時にのみ可能であれば良いので、#if UNITY_EDITOR ~ #endif で挟むことによってその間に書かれた処理をエディタ上でのテストプレイ時専用にします。

Data.cs

BattleSceneLoaderへの参照およびゲームオーバーフラグの作成を行いました。

BattleManager.cs (一部省略)

ダンジョンシーンからバトルシーンを開く場合、2つのシーンが同時に開かれている状態になりますが、それはシーンを映しているMain Cameraが2つになるという意味でもあります。

バトルシーン側のカメラは基本的に不要なので、シーン開始時に無効化させてしまいましょう。

ただしバトルシーンを直接起動してデバッグする際はカメラがあっても良いのでオブジェクトを削除する必要はありません。

Inspectorの編集と動作確認

スクリプトが作成できたらDataManagerプレハブの編集画面を開き、DataManagerまたはBattleTransitionFadeオブジェクトにBattleSceneLoaderをアタッチ、参照をセットします。

続いてBattleシーンのManagersのBattleManagerに対してMain Cameraへの参照をセットします。

 

ここまでの実装によってダンジョン探索からの戦闘開始までの流れが確認できるようになりました。街シーンで作成したキャラクターについても編成に組み込まれていることが確認できます。

ダンジョン内のランダムエンカウントシステムをUnityで実装する

ダンジョンをランダムな歩数分を移動した時に自動的に戦闘が開始されるランダムエンカウントの仕組みを実装します。

エンカウントゲージUI作成

ダンジョンに突入してから、あるいは最後にザコ敵との戦闘を終えてから何歩ほど歩いたかをゲージで表示する画像UIを作成します。

あとどのくらい歩くと敵が出そうかを視覚的に表示しているゲームとしては世界樹の迷宮や真・女神転生シリーズなどがありますね。

まずはDungeonのCanvas以下にゲージ背景画像としてImageを作成し、EncountGageBackと名付けます。画面左上あたりに配置しましょう。

そしてその子としてEncountGageを作成します。こちらがゲージ本体の画像になるのでImage TypeはFilledに変更、Fill MethodはHorizontalにします。

なお、エンカウントの発生はランダムなタイミングなのでゲージが満タンになる=エンカウントではなく、ゲージがおよそ半分を過ぎたあたりから常にエンカウントの可能性があるように設定します。

ここからは各スクリプトを編集してエンカウント処理を実装します。

DungeonManager.cs

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

まとめ

ここまでの実装によって、
街シーンでのキャラクター作成・編成→ダンジョンシーン探索→バトルシーンでの戦闘→ダンジョンシーンで再び探索
という基本的なゲームの流れを実現できました。

次からはこのゲームの育成や戦闘の機能をより深みのあるものにします。まずはスキル習得が可能なスキルツリーシステムを実装していきましょう!

次の記事:

【Unity】3DダンジョンRPGの作り方 第13回|スキルツリー成長システムを実装する
この記事は3DダンジョンRPGの作り方講座の第13回になります。前回まででキャラクターの作成からダンジョンの探索、戦闘までの流れを一通り実装しました。前回の記事:今回は街シーンで職業ごとに決められたリストの中からアクターがスキルを選んで習得...

Unity 3DダンジョンRPGの作り方講座に戻る >>

 

【ゲームの作り方講座もプレゼント中!】

現場レベルのゲーム制作が、すべてここで学べます。

【永久会員チケット】

永久会員チケット|Unity入門の森

全講座を見放題で学ぶ

ソースコード・素材・プロジェクトすべて公開。
Unityの基礎から応用まで、一生使えるスキルを体系的に習得。

コメント

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