2017-07-10 7 views
0

私は小さなビデオ・ゲームをC#と統一で設計しています。私はアイテムを持っていないオブジェクトを持っており、アイテム(剣、薬など)のデータ(攻撃ブースト、HPブーストなど)を保存しています。ベスト・デザインのプラクティス:ルックアップ・テーブルまたはクラス・フィールド

しかし、私はユニティゲームオブジェクトアイテムを物理的に表現しています(ドロップして取り上げることができます)。

私はResourcesフォルダを使用します。しかし、私はシステムを設計するより良い方法が何であるか疑問に思っています...

私は、関連するプレハブをどこで見つけるかを知るために、私が物理的にUnityに現れるアイテムを作成したい場合は3番目のクラス)、文字列を取り込み、辞書を検索し、後でインスタンス化できるプレハブを返すデータベースクラスを使用します。

また、自分のアイテム内にgameObjectを作成し、自分のアイテムの構築中にresourcesフォルダ内のwhatsを探す必要がありますか?その後、3番目のクラスを通して、データベースなどを使用してgameObjectを直接インスタンス化する必要はありません。

、データベースにすでに------

public static GameObject InstantiateDroppedItem(Item item, Vector3 location) 
{ 
    GameObject toInstantiate = ItemDatabase.LookUp(item.ResourcesLocation); // ItemDatabase = static class, ResourcesLocation is string property 
    return Instantiate(toInstantiate, location); 
} 
// Have to make a ItemDatabase static class beginning with an empty dictionary that takes in string and outputs an item prefab. The process for looking up an item via the location string will be: 

1.チェックするとアイテムのプレハブを何かをインスタンス化しそうならば、それを取得しになりたい-------(第3)クラス完了しました。データベースにない場合は、それを調べてデータベースに格納します。

OR

public static GameObject InstantiateDroppedItem(Item item, Vector3 location) 
{ 
    return Instantiate(item.ItemPrefab, location); // ItemPrefab is GameObject property 
} 
// Have to make complicated Item constructor that searches the Resources folder for the prefab used to initialize ItemPrefab gameObject property. 

どちらのオプションが良いようです。

--- ItemDatabaseディクショナリは、多くのものを実装する方法の問題です。そして、コーディングが進むにつれて、SpriteDatabase(UIに表示されている項目の場合)などが用意されています。したがって、大量のデータベースを作成する場合は、プログラミングを取り除くだけですオブジェクト指向のファッションで、アイテムにIDだけが含まれるようにすると、他のすべてのアイテムを参照する必要があります。これにより、すべての単一のデータベースを変更する必要があるため、アイテムの更新/作成が非常に困難になります。非常に複雑で、デバッグと将来の開発に大きな負担をかけることになります。 --- gameObjectプロパティ項目のコンストラクタを設定する私は、クラスがただ一つのことをしなければならないという考え方に違反していると思います。 (どういうわけか、これもまたデータベースとやりとりしています。)そして、それは現在、 'UnityEngineの使用'に依存しています。相互依存関係が拡大しているようです。

私は何かをコード化するたびに、仕事を終えることができる多くの方法を知っていますが、私はそれを見て結局別の方法で実装するべきかどうか疑問に思っています。これを読んでいただきありがとうございます。また、どんな答えも高く評価されています。

最後に、私の問題で私を助けてくれると思うリソースがあれば、私に教えてください(私には最高のものに対する一般的な感覚はないと思います...)

+0

ゲームは2Dか3Dですか? – naturalbornlazy

+0

私のゲームは3Dです。 。 –

答えて

0

警告:これはベストプラクティスではなく、あなたが望むことを実行するための多くの方法の1つです。

私は、JSONを使用することをお勧めし、あなただけの、たとえば1つのJSONファイルを必要とするようにDBの最新デザインを作成します。スプライトは{すべてのものは、IDまたはwatevaでスプライト}、アイテム{項目などについてのすべてのもの}

あなたが唯一の私はかつてユニティの資産を使用した以外の本liek団結自身のJSONパーサでのsimplejson、jsonFile [スプライト] [メインメニュー] [PIC1]

をお勧めします任意のJSONライブラリを持つ単一JSONファイルを呼び出す必要があります。その後

あなたのscenerioでも使うことができる1つの大きなファイルを作成するデータベースですが、例えば欠点があります。行の下に新しいフィールドを追加すると、すべての資産DBがリセットされます。

関連する問題