2017-11-10 2 views
1

私は現在ユニティのRPGゲームのためにアビリティシステムに取り組んでいます。C#ユニティシェアリングクラスインスタンスVS多くのインスタンス:どれが最高のパフォーマンスですか?

私はの配列をそれぞれ含むAbilityクラスのインスタンスで作られた能力システムを持っていると決めました。

AbilityUse()メソッドを使用する能力は、Effect[]配列をループし、それぞれに対してApply()メソッドを呼び出します。

Apply()>Use()呼び出しでエフェクト固有の引数を渡すことができないため、各エフェクトが必要な情報をフェッチして独自のクラスの変数に格納できるようにする必要があります。 。

私はそれを行う方法を見つけることができると仮定すると、各能力の間で共有された各Effectのインスタンスを1つだけ持つ方が効率的でしょうか。

私は両方のための欠点を見ることができます:

1)私が期待する何の共有インスタンスとUse()呼び出しがキューに入れなければならないということです(私は右のそれを考えるにいる)とき、ゲームを遅く可能性があります?多くの呼び出しが行われます。

2)個々のインスタンスでは問題はありませんが、メモリにはさらに多くのインスタンスがロードされます。

どちらが最適ですか?一般的なプログラミングの練習とパフォーマンスの面では?

答えて

1

私は実際には同様の状況にあり、私は自分の思考のいくつかを分かち合うと思っていました。

Use()関数を使用すると、基本的なコードがどちらの実装でも実行されなければならないため、実際には遅くなるとは思えません。キューが必要ではないと思います関数を静的にすることができるので、クラスのインスタンスがクラスメソッドを呼び出す必要はありません。

私は答えが主にどの種類の情報をUse()関数に渡す必要があるかによって異なると思います。各キャラクタが各能力に固有のパラメータを格納する必要がある場合、個々のインスタンスでメモリを実際に節約することはできません。メモリの構成方法が変更されるだけです。すべてのパラメータが能力特有ではなく文字固有である場合、適切なUse()関数を指すように何かを格納するだけでよいので、他の実装がメモリにとってより良いものになると思います。

こちらがお役に立てば幸いです。私はあなたが探していた答えのタイプは本当に分かっていませんが、答えが無かったほうが良いと思いました。私はあなたが使うものを選ぶことを知りたいです!

+0

お返事ありがとうございます。これまでのところ私のプレイヤーだけが能力を使用するので、各能力のインスタンスを1つ作成して使用することができます。私は実際に、機器や消耗品のようなもので使用するために、私のエフェクトシステムをリサイクルするのにもっと問題があると考えました。私はEffectsの 'Apply()'メソッドのオーバーロードを解決しました。他の「消耗品」は「能力」を取ります。将来、 'Use()'メソッドの能力を使ってキャラクターのキャラクターGameObjectを渡すかもしれません。 – Sorade

+0

私に知らせてくれてありがとう!私が働いているゲームでは、敵が能力だけでなくプレイヤーも必要とするので、いくつかのキャラクター固有の入力を必要とする静的メソッドを使うつもりだと思うが、まだ考えていない問題があるかもしれないだから私は似たようなシステムを使い終わるかもしれない。私はあなたのゲームがうまく行くことを望む! – kylengelmann

+0

ありがとうございます。参考までに私のエフェクトシステムを少し変更する予定です。各キャラクターにはエフェクトの管理を担当するEffectHandlerコンポーネントがあります。これにより、エフェクトスタッキングやすべてを簡単にコントロールできるようになります。私は、GameObjectをMy EffectsのAddToHandler()メソッドに渡して、GetComponent ()がnullでない場合は、エフェクト自体を登録することもできます。あなたが他の機能の設計について議論したいのであれば、私はUnityフォーラムと同じ名前で回答しています。 – Sorade

関連する問題