敵のステータスデータの持ち方の設計について

敵が登場するゲームにおいて必要なデータであるステータス。

今回はそのステータスの実装方法について検討していきたいと思います。

コンテンツ

現在の実装

現在開発は開発のためですが。

すべてインスペクターに記載しています。

敵の設計については以下を参照。

実際インスペクター上にこのよう設定できるようになっています。

欠点

スクリプトに直書きよりははるかにましですが。

欠点として

  • プレハブを開かなければ編集できない
  • 全く同じパラメータを持った敵が出てきたとき使いまわしができない

2つだけですが、この2つバランス調整をする際に致命的な時間ロスになります。

この場合の対処方法としては、

CSVを作成し、スプレットシートやエクセルで管理する方法がありますが。

この場合、

  • エクセルはGitで差分が見えないので相性が悪い
  • Gitで管理しているのでスプレットシート管理はデータの場所が非常に遠いので管理場所が増える
  • エクセルのクラウドの場合もデータの場所が非常に遠いので管理場所が増える
  • そもそもエクセルを持っていない

と非常にこちらの環境と非常に相性悪い。

そのため今回はUnityのオブジェクトとしても扱えるScriptableObjectを作成

Unityで完結したいと思います。

実装

ステータスをScriptableObjectにする場合このようになります。

[CreateAssetMenu(menuName = "Create CharacterStatus")]
public class StatuaData : ScriptableObject
{
	// ----------------------------------------------
	// 設定項目

	[SerializeField]
	public int m_hp = 0;

	[SerializeField]
	public int m_atk = 0;

	[SerializeField]
	public float m_energy = 100;

	[SerializeField]
	public float m_healEnergyPerSec = 1;

	[SerializeField]
	public int m_point = 10;

	[SerializeField]
	public float m_speed = 0.0f;

	[SerializeField]
	public float m_searchRange = 0.0f;


	// ----------------------------------------------
	// アクセサ

	public int   Hp               { get { return m_hp;               } }

	public int   Atk              { get { return m_atk;              } }

	public float Energy           { get { return m_energy;           } }

	public float HealEnergyPerSec { get { return m_healEnergyPerSec; } }

	public int   Point            { get { return m_point;            } }

	public float Speed            { get { return m_speed;            } }

	public float SearchRange      { get { return m_searchRange;      } }
}

見事に定義だけのクラスですが。

実際の使い方として

最初の行に記載した通り、以下を記載することでこのスクリプトのScriptableObjectを生成できる

項目を追加することができます。

[CreateAssetMenu(menuName = "Create CharacterStatus")]

このように

  1. 適当なフォルダを選択
  2. Create>Create CharacterStatusを選択
  3. フォルダ名を入力

このようにできました。

あとはパラメータを入力して作成することができました。

あとはこのScriptableObjectをアタッチすることで完了となります。

この場合Data>Characterフォルダがステータスの一元管理をするので

ステータスの調整をしたい場合はこのフォルダの編集のみで完結するので非常に楽になります。

まとめ

ステータス系はゲームのバランスに直結するため頻繁に変更されます。

そのたびにプレハブを開くのは苦でしかないのでなるべく一元管理するに越したことはないです。

ツールの都合上見送りましたがCSV管理もUnityを起動せずに編集できるので、

非常に楽ですのでおすすめです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT US
vuniformity誰でもない人
トレンドの行く末を見守っている
仮名を名乗るエンジニア

ゲーム開発は仕事であり趣味である
プログラムだけでなく多種多様なスキルを数多く持つ

ゲーム開発は
ソーシャルゲームを開発運用の経験アリ
ゲーム以外にも経験アリ
Webサービス保守開発等に携わる

ゲームプレイの主な戦場は
FGO
FEH
MTGA
マビノギ
ここでは主にunityroomで公開しているゲーム作り直しの軌跡を綴っていきます