🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

891閲覧

ScriptableObjectによるアイテムデータの管理に関する質問

sushisuke6

総合スコア18

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/12/05 08:41

https://gametukurikata.com/program/scriptableobjectitemdatabase
こちらのサイトを参考に、ScriptableObjectを用いてアイテムのデータベースを作成しています。
上記サイトでは、アイテムの種類をenumを用いて設定し、アイテムの情報を変数としてもっています。

目的

私が実装したいのは、アイテムの種類別にアイテムがもつ変数を変えられないかということです。
たとえば、アイテムの種類が武器である場合、攻撃力をもち、アイテムの情報が防具である場合は攻撃力を持たず、防御力のみをもつというような実装です。このようなことはそもそも可能なのでしょうか?より簡単な方法であれば、武器データベース、防具データベースでアイテムの種類ごとでデータベースを分けてしまうことも考えましたが、アイテムの種類ごとに型が変わってしまうと、アイテムに関連する処理(たとえば、アイテムの情報をポップアップするような処理)を実装するときにそれぞれの型についてプログラムを書かなければならないというような煩雑さが生じるような気がしています。

どうぞよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

**「継承」**という仕組みを使えば可能です。
例えばItemというクラスを継承したWeaponクラスを作った場合、WeaponクラスはItemクラスとしての特性も得ることになります。(Itemクラスの継承元にScriptableObjectを指定しておけば継承先でもScriptableObjectになります)
そもそもScriptableObjectも(何ならMonoBehaviourも)この仕組みを使って動いています。

詳細を説明すると長くなるので以下などご参照ください。
Inheritance - Unity Learn(公式チュートリアル)
【初心者向け】継承・多態性について
ScriptableObjectの入れ替えで振る舞いを変える - Qiita


なお今回の場合、『本当に「武器は攻撃力のみを持つ」「防具は防御力のみを持つ」でいいのか?』というところから考えた方がいいかなと思います。
例えば防御力が上がる武器や攻撃力が上がる防具が後で欲しくなるかもしれません。
なので両者をひっくるめて「装備品」というクラスを作り、タイプはenumで指定、攻撃力・防御力両方の変数を持ち不要な方の値は0にする……などの方が都合が良いかもしれません。

あるいは、いっそのこと全部「アイテム」クラスに一本化してタイプはenumで指定、全部のパラメータ用の変数と「何が出来るか」を指定する変数を用意。使用時は「何が出来るか」に従ってScriptableObjectとは別のアイテム発動用クラスのメソッドを呼ぶという手も一応考えられます。

この辺を考えるのが**「設計」**なので、あなたのゲームにとって一番都合が良い方法を考えてみてください。

投稿2019/12/05 10:10

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sushisuke6

2019/12/05 13:17

大変参考になりました!継承というアイデアをすっかり忘れておりました。またゲームを設計するうえで、柔軟性をもたせるためにももう少し考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問