ターン制戦略シミュレーションRPGの作り方8 パラメータ・属性システムGUI表示

Unity SRPG(戦略シミュレーションゲーム)の作り方


Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

この記事は古く昔からの名作タクティクスオウガやファイアーエムブレムやファイナルファンタジータクティクスのような名作ターン制戦略シミュレーションRPGの作り方を解説する講座の第8回目です。

前回はプレイヤーの移動範囲の設定や移動可能範囲エリアの表示などを行う基本的な処理を実装しました。

前回の記事:

戦略シミュレーションSRPGの作り方7 駒の移動範囲を自由に設定する
この記事は戦略シミュレーションRPGのプログラミング入門講座の第7回目です。 前回に引き続きキャラクターの移動操作を実装していきます。前回はSRPGにおいて必須となる移動させたいキャラクターとマップのマスの紐づけを行い、実際にキャラクタを...

今回は、キャラクターの攻撃処理の実装に備え、HPなどのパラメータを設定し画面に表示するところまでを実装しましょう。UIの設定が主になります。画面解像度問題なども意識しつつ制作を行っていきましょう。

また、ゲーム性を高める属性攻撃システムも後に実装していきますが、そのための前準備としてのUI作成もここで行います。


【Line登録者限定のプレゼントもあるよ!】

キャラクターのパラメータを設定する

キャラクターに個性を持たせるため、キャラクターデータごとに個別のパラメータをInspectorから設定できるようにしましょう。

今回設定できるようにするパラメータは以下の6種類です。

名称 スクリプト上の変数名 概要
敵フラグ isEnemy bool

味方キャラクターか敵キャラクターかを識別するフラグ

(敵キャラクターのみtrueにする)

キャラクター名 charaName string 画面に表示するキャラクター名
最大HP(初期HP) maxHP int 最大体力(=初期体力)
攻撃力 atk int

戦闘のダメージは

「攻撃側のatk - 防御側のdef」で決定します。

防御力 def int
属性 attribute (追加の列挙型)

キャラクターが個別に持つ4種類の属性。(水・火・風・土)

属性間には相性があり戦闘ダメージに関わります。

この記事ではキャラへの設定と表示までを行い、戦闘への影響は講座後半に実装します。

スクリプトで以上の変数・列挙型を実装します。

また、ゲーム内で変化するデータとして現在HPの変数(nowHP)も用意します。

これでInspectorから値のセットが可能になります。列挙型の変数でもpublicならその対象となります(上記ソースコードでAttributeで列挙体として属性を設定していますが、C#のsystem名前空間のAttributeとは別物なので注意)。

それでは早速6体分のステータスをそれぞれ記入していきましょう。講座での例は以下になっています。

GUIにステータスを表示する

いま設定したステータスをGUIの機能を用いてゲーム画面内に表示させてみましょう。

UnityにはデフォルトでGUI表示をサポートする機能が多数存在します。画像や文字、ボタンといったUIオブジェクトを[Canvas]オブジェクトの下に作成して表示させる事が可能です。

まずはステータスを表示するウィンドウとして画像UIを作成しましょう。Hierarchyビュー右クリック→[UI]→[Image]の順でクリックし、名前は「StatusWindow」とします。

UIオブジェクト作成時にCanvasが存在しなかった場合は自動的に生成してくれます(Canvasオブジェクト)。

  • 同時に生成されるEventSystemオブジェクトはユーザー側の操作に対応するための処理を行っています。削除しないようにしましょう。

このままステータスウィンドウの作成を開始しても良いのですが、先にCanvas側の設定で変更しておくべきものがあります。Canvasオブジェクトを選択し、Canvas Scalerコンポーネントを確認してください。

この中で[UI Scale Mode]パラメータはUIの大きさ・配置を決定する際、その方法や基準を設定するものになります。

Constant Pixel Size 画面のサイズによらずピクセル単位でUIの大きさを決めます。
Scale With Screen Size 画面のサイズに合わせてUIの大きさを決めます。
Constant Physical Size 物理的なサイズでUIの大きさを指定します。

スマートフォン向けゲームを制作する場合、端末の種類ごとに画面の大きさ(解像度)や縦横比(アスペクト比)が異なってきますので、あらゆるタイプの画面に対応できるUI設定にしなければいけません。

上記の3つの中でそれが可能なのは[Scale With Screen Size]ですので、まずはモードをこれに切り替えます。

このモードに切り替えるとその後に続く他のパラメータの種類も変化します。

Reference Resolution UI設計の時に基準となる解像度。X方向(横)とY方向(縦)で入力します。
Screen Match Mode

画面のアスペクト比が↑で決めたものと一致しない場合にどう対応するかを選択します。

初期状態の[Match Width or Height]では画面の横幅もしくは縦幅を基準にしてUIの大きさを決定します。

Match

Screen Match Modeが[Match Width or Height]の時のみ

↑の基準を画面の横幅とするか縦幅とするか、あるいはその中間にするかをスライダで指定します。
Reference Pixels Per Unit 画像(スプライト)側の「Pixels Per Unit」設定に対するUI画像の大きさを指定します。

Reference Resolution以外は変更しなくてOKですが、画面サイズの基準を決めるこのパラメータは重要です。

今回は現在使用している画面サイズ[2160×1080 Landscape]のちょうど半分となる[X:1080 Y:540]を指定します。(アスペクト比は2:1となります。)

ステータスウィンドウを作成する

Canvas側の準備が完了したのでステータスウィンドウの作成に入ります。

続きを読む

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

これで選択したキャラクターのステータス画像が表示されるようになりました。

ゲージの減少を確認したい方は一時的にnowHPの値をスクリプト内で変更してみてください。

まとめ

  • 画像や文字をUIとして表示する時はCanvas以下にUIオブジェクトを作成して配置します。
  • UIオブジェクトはRectTransformコンポーネントを持ち、アンカーを設定すれば画面サイズの変化にも対応できるようになります。
  • TextコンポーネントにはShadowコンポーネント、Outlineコンポーネントによる修飾が可能です。
  • ImageコンポーネントのFilled設定はゲージのように変化する画像の表現に適しています。

次回ではキャラクター同士の戦闘(攻撃処理)を実装していきます。

次の記事:

戦略シミュレーションRPGの作り方9 ターン制戦闘システムとSLGのコマンド入力を開発
この記事はターン制の戦略シミュレーションRPGの作り方講座の第9回目です。 前回の記事ではUIの設定を行いながら、キャラクターにHPや攻撃力や属性システムに用いるパラメータを設定しました。 前回の記事: 今回の記事では設定したパラ...

Unity SRPG(戦略シミュレーションゲーム)プログラミング講座に戻る>>



Unity入門の森オリジナル本格ゲーム制作講座はこちら
7種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

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