現場レベルのゲーム制作が、すべてここで学べます。
この講座は3Dダンジョン探索型RPGの作り方について説明しています。今回はその第10回目になります。
前回まで戦闘システムの開発を進め、複数ターゲットなどの機能も実装して一区切りとしました。
前回の記事:

今回からはダンジョンRPGの重要な要素の1つとなるキャラクター作成および育成システムを実装していきます。ウィザードリィで例えると訓練所のようなシステムですね。
自分でキャラクターメイキングを行い登録。そして登録したキャラクターでパーティ編成できるようになります。
Unityで他作品を作るときにも応用の効くドロップダウン・スクロールビュー機能を使います。スキルアップしながらキャラクターメイキング・パーティ編成画面を作っていきましょう!
UnityでRPGのタウン(街)シーンを作成
タウン(街)シーンはゲーム起動後に開始されるシーンとして設計し、この画面からキャラクターを作成したり、それをパーティに編成したり、スキルの習得や装備変更などを行ったり、ダンジョン探索を開始できるようにしていきます。
タウンシーンはバトルシーンと同様、3Dオブジェクトは配置せずCanvas内のUIによって画面を構成します。
よってCanvasの設定はそこからの使いまわしで良いため、まずはBattleシーンを開き、それを別名で保存することで新規シーンとするのが楽です。新しいシーン名はTownとします。

その後、もともとCanvasオブジェクト以下にあったオブジェクトを全て削除することで初期化完了とします。

TextMeshProへの固定文章を言語別に適用するスクリプト
UIオブジェクトを作成していくにあたって今後もTextMeshProによる文章表示を使用していきますが、それぞれの文章はシーン中に変化するものとしないものの2種類があります。
戦闘画面で作成した「キャラクターの残りHPを表示するテキスト」などはシーン中に変化する文章です。
対してシーン中に変化しないものとは、例えばバトルコマンドボタンの「ATTACK」やキャラクターUI内の「HP」「TP」という文章です。
変化しない文章にはこの先日本語も使用しますが、言語設定が英語に設定されている場合は英語版に切り替わって表示できるようにしたいです。
よってまずはTextMeshProコンポーネントにアタッチして使用する、「日本語と英語の文章のうち適したものを表示する」機能をもつクラスを作成します。
SimpleTranslationText.cs (新規)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
using UnityEngine; using UnityEngine.UI; using TMPro; /// <summary> /// シーン開始時に同オブジェクト内のTextまたはTextMeshProの内容を設定言語別に変更する /// (シーン中に変化しないText用) /// </summary> public class SimpleTranslationText : MonoBehaviour { [Header ("表示文章(日本語)")] [TextArea] [SerializeField] private string text_JP = ""; [Header ("表示文章(英語)")] [TextArea] [SerializeField] private string text_EN = ""; void Start () { Translation (); } // 言語設定反映処理 public void Translation () { // 言語別文章適用処理 TextMeshProUGUI tmProUI = GetComponent<TextMeshProUGUI> (); if (tmProUI != null) {// TextMeshProUGUIがあればそれに適用 // 設定言語別に適用 tmProUI.text = GetTranslatedString (text_JP, text_EN); } else {// TextMeshProUGUIがない場合は旧Textコンポーネントに処理 Text textUI = GetComponent<Text> (); if (textUI != null) { // 設定言語別に適用 textUI.text = GetTranslatedString (text_JP, text_EN); } } } /// <summary> /// 指定された文字列の中から言語設定に則したものを返す /// </summary> public static string GetTranslatedString (string mes_JP, string mes_EN) { if (Data.nowLanguage == SystemLanguage.Japanese) return mes_JP; // 日本語 else if (Data.nowLanguage == SystemLanguage.English) return mes_EN; // 英語 else return mes_EN; } } |
インスペクターからtext_JPパラメータに日本語で表示する文章、text_ENパラメータには英語で表示する文章を予め入力しておけば、あとは自動的に切り替えて表示してくれます。
またstaticメソッドとしてGetTranslatedStringも定義しています。これは引数に日本語、英語のstringをそれぞれ渡せば言語設定に応じたstringを返してくれるものです。今後ほかのクラスからも多用する予定です。
各UIオブジェクト作成
ここからは「街画面でキャラクターを作成&編成し、そのチームでダンジョンへ進んでバトルを行う」という基本的な流れの実装を目標に開発を進めていきます。
まずはTownシーンに以下のUIオブジェクトを配置していきます。
- 背景画像UI
- ①:ダンジョンへ行くウィンドウ
- ②:編成ウィンドウ
- ③:キャラクター作成ウィンドウ
- ①~③のウィンドウを開くためのボタン
基本的にはImageやTextMeshPro、Buttonなどの今まで扱ったUIのみを使用するので、ここからは文章での設定説明は割愛します。
細かなレイアウトや使用する画像等は各々自由にアレンジしても問題ありません。
(Image)背景画像オブジェクト_BackGround
背景画像オブジェクトとしてBackGroundを作成します。
戦闘画面のときと異なり、全てのUIオブジェクトはこのBackGroundより子の階層に配置していきます。

(Button – BackGround)ウィンドウを開くボタン_TownButton
「ダンジョンへ行く」ウィンドウや「編成」ウィンドウなどの各種ウィンドウを開くためのボタンとしてTownButtonを作成します。

(子オブジェクト)Text (TMP)
子オブジェクトとして自動生成されているTextMeshProの設定も変更します。
先ほど作成したSimpleTranslationTextコンポーネントもアタッチしておきます。(文章は入力不要)

(Image – TownButton)ボタンの外枠画像_ButtonFrame
ボタンの外枠の装飾として画像オブジェクトのButtonFrameを作成します。
ボタンの大きさは可変とするので、外枠画像のサイズもボタン自体の大きさに自動的に合わせるようStrechの設定に変更します。

TownButtonプレハブ化・インスタンスの配置・文章編集
いま作成したTownButtonオブジェクトはウィンドウの数だけ必要になるので、プレハブ化して使いまわせるようにしておきます。Townフォルダを作ってプレハブを保存します。

プレハブ化を終えたら元になった1つめのインスタンスはTownButton_Dungeonに名称変更します。そしてRect Transformの位置を調節して「ダンジョンへ行く」ボタンを完成させます。

そしてこのボタンは、日本語では「ダンジョンへ行く」、英語では「Go Dungeons」という文章を表示したいのでText (TMP)内のSimpleTranslationTextに言語別の文章入力します。

(実行時でないシーンビュー上ではTextMeshPro – Textコンポーネントに入力したもののみが表示されます。)
続いて「キャラクター作成」ウィンドウを開くボタンもプレハブから配置します。位置は好きな数値で調整してOKです。SimpleTranslationTextでは日本語に「キャラクター作成」、英語に「Recruit」と入力しておきます。


「編成」ウィンドウを開くボタンも同様に作成・配置します。細かなレイアウトは自由に調整してください。SimpleTranslationTextでは日本語に「編成する」、英語に「Formation」と入力しておきます。


(Empty – BackGround)各種ウィンドウ用空オブジェクト_FacilityUI
ここからは「ダンジョンへ行く」「編成」などのウィンドウUIを作成します。こちらもプレハブ化を前提とした設計になります。
まとめ

長くなってしまったのでここまでを前半として一度終了とします。
後半ではスクリプトを作成し、職業の設定からパーティ編成編成、ダンジョンシーンへの遷移などの動きを一通り実装します。
次の記事:

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






コメント