【Unity】RPGを作るチュートリアルその23 定義データの修正(魔法、アイテム)
- 2025.02.21
- RPGチュートリアル
- RPG, Unity, ゲーム開発, チュートリアル

シンプルなRPGをUnityで作るチュートリアルシリーズの23回目です。
第22回では戦闘で選択できるコマンドについて実装方針を固め、定義を作成しました。
今回は以前作成した定義データの修正を行いたいと思います。これは戦闘機能の全体を先に実装してみたところ、データの持ち方を少し変えた方が処理が分かりやすそうだと判明したため、魔法とアイテムについて修正を行います。
制作環境
MacBook Pro 2023 Apple M2 Max
Unity6 (6000.0.30f1) Silicon
作業内容と順序
シンプルなRPGを作る上でどんな作業が必要か、どんな順番で作っていくと良さそうか、別ページで検討しました。基本的にこの流れに沿って進めていきます。
チュートリアルの一覧
このシリーズ全体の一覧は以下のページにまとめています。
前回の内容
前回は戦闘で選択できるコマンドについて実装方針を固め、定義を作成しました。
修正の対象と方針
魔法の定義データでは、魔法効果のリストという形で、魔法のカテゴリや効果範囲、効果量を定義したクラスを保持していました。
一方のアイテムデータでは、データに紐づく形でアイテムのカテゴリが設定されていましたが、このカテゴリは消費アイテムか、武器か、防具か、といった区分で、使った時の効果を定義できていませんでした。そのため、魔法と同じようにアイテム効果のクラスを作って、使った時の効果を定義できるようにしたいと思います。アイテムの方は効果をリスト化せず1つの効果を発揮するようにします。シンプルに実装する場合、複合的な効果を実装する場合、の2パターンを体験することを目的とします。
魔法の効果クラスでは以下のようにカテゴリや効果範囲を持っているので、アイテムでも同じようにItemEffectのクラスを実装したいと思います。このとき、効果範囲を表す既存の「MagicTarget」のEnumについては使いまわせるので、名前を一般化して「EffectTarget」に変更したいと思います。
今回行いたい作業としては、以下のものになります。
- MagicTargetの型名変更
- アイテムの効果カテゴリ用のEnumを作成
- アイテム効果のクラスを作成
- アイテムの定義クラスの修正
それぞれ順番に進めていきます。
スクリプトの修正
MagicTargetの型名変更
Projectウィンドウから「Assets/Scripts/Enums」に移動して、「MagicTarget」のスクリプトファイルの名前を [EffectTarget] に変更します。

続いて「EffectTarget」のファイルを開き、型名とコメントを変更します。
元「MagicTarget」は魔法効果クラスである「MagicEffect」で使われているため、中身を修正します。魔法の効果範囲のフィールドの型を「EffectTarget」に変更し、名前も変更しておきます。
フィールド名が変更されたことで「MagicData_0001」のデータにも影響が出るのですが、今回のケースではEnumの値が再設定されるにあたって規定値の「Own」が選択されることから、そのまま使用できます。もし規定値以外の値が設定されているフィールドの名前を変更した場合は、そのフィールドの値を確認するようにするとグッド。
アイテムの効果カテゴリ用のEnumを作成
次にアイテムの効果カテゴリ用のEnumを作成していきます。こちらも魔法効果のカテゴリと同じイメージで作成していきます。
Projectウィンドウから「Assets/Scripts/Enums」のフォルダにて、空のスクリプトファイルを作成します。名前は [ItemEffectCategory] にしました。

作成した「ItemEffectCategory」の中身は以下のように記載しました。
アイテムと魔法でカテゴリの項目は同じにしてありますが、ゲームによってはそれぞれ別の効果を定義したいこともあるので別の型に分けています。効果として一括りにして選択する方法もあるので、作りたいゲームの設計に合わせて分けるか一緒にするか決めていくと良いかと思います。このチュートリアル内では別の型として進めます。
アイテム効果のクラスを作成
続いてアイテム効果のクラスを作成します。Projectウィンドウから「Assets/Scripts/Data」のフォルダに移動して、空のスクリプトファイルを作成します。名前は [ItemEffect] にしました。

作成した「ItemEffect」の中身は以下のように記載しました。
中身のフィールドに関しては魔法の時と同じようにしています。アイテムか魔法かの違いになっていますが、個別に必要な項目があれば追加できるようにしています。
アイテムの定義クラスの修正
アイテムの定義クラスを修正するのに必要な情報が揃ったので、こちらも修正を加えていきます。「Assets/Scripts/Data」のフォルダにある「ItemData」のスクリプトファイルを開き、以下のようにアイテムカテゴリのフィールドを追加します。
元々アイテムの効果量を定義していたフィールドの部分を、「ItemEffect」への参照に変更しました。効果量については「ItemEffect」内で定義しているので、こちらの値を読み取って使っていきます。
効果に関してフィールドを追加したことで、アイテムの定義データも変更する必要があるので、そちらの作業も行います。Projectウィンドウから「Assets/Data/Items」のフォルダに移動し、「ItemData_0001」のファイルを選択します。

Inspectorウィンドウでは「ItemEffect」の項目が追加されているので、「Item Effect Category」を [Recovery] に、「Effect Target」を [Own] に、「Value」を [30] にそれぞれ設定します。

薬草以外のアイテムデータは武器や防具なので、使用時の効果は設定しなくてOKです。今回必要な修正に関してはこれで完了なので、コンパイルエラーがないことを確認して一区切りにしましょう。
今回のブランチ
まとめ
今回は以前作成した定義データの修正を行いました。プロトタイプとして簡単に全体を動かしてみると、設計時に考慮されていなかった項目などに気づきやすいので、なるべく早めに動かすのが良いかと思います。定義データ系はデータ量が増えると修正が大変なこともあるので、登録作業より前にシステム系を作っておくと手戻りが少なくて良さそうですね。
次回はキャラクターの定義データを作成していきます。レベルに対応するパラメータ表の「ParameterTable」をキャラクターの定義として使おうと考えていましたが、データ構造や取り回しのしやすさを考えてキャラクター用に定義データを作った方が良いと考えました。フィールドとしては多くないのですが、こちらの作成を行なっておきましょう。あ、主人公の名前もいよいよ設定します。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】RPGを作るチュートリアルその22 戦闘のコマンドの定義 2025.02.20
-
次の記事
【Unity】RPGを作るチュートリアルその24 キャラクターの定義データを作成 2025.02.21
コメントを書く