私は現在ユニティのRPGゲームのためにアビリティシステムに取り組んでいます。C#ユニティシェアリングクラスインスタンスVS多くのインスタンス:どれが最高のパフォーマンスですか?
私はの配列をそれぞれ含むAbility
クラスのインスタンスで作られた能力システムを持っていると決めました。
Ability
のUse()
メソッドを使用する能力は、Effect[]
配列をループし、それぞれに対してApply()
メソッドを呼び出します。
Apply()
>Use()
呼び出しでエフェクト固有の引数を渡すことができないため、各エフェクトが必要な情報をフェッチして独自のクラスの変数に格納できるようにする必要があります。 。
私はそれを行う方法を見つけることができると仮定すると、各能力の間で共有された各Effect
のインスタンスを1つだけ持つ方が効率的でしょうか。
私は両方のための欠点を見ることができます:
1)私が期待する何の共有インスタンスとUse()
呼び出しがキューに入れなければならないということです(私は右のそれを考えるにいる)とき、ゲームを遅く可能性があります?多くの呼び出しが行われます。
2)個々のインスタンスでは問題はありませんが、メモリにはさらに多くのインスタンスがロードされます。
どちらが最適ですか?一般的なプログラミングの練習とパフォーマンスの面では?
お返事ありがとうございます。これまでのところ私のプレイヤーだけが能力を使用するので、各能力のインスタンスを1つ作成して使用することができます。私は実際に、機器や消耗品のようなもので使用するために、私のエフェクトシステムをリサイクルするのにもっと問題があると考えました。私はEffectsの 'Apply()'メソッドのオーバーロードを解決しました。他の「消耗品」は「能力」を取ります。将来、 'Use()'メソッドの能力を使ってキャラクターのキャラクターGameObjectを渡すかもしれません。 – Sorade
私に知らせてくれてありがとう!私が働いているゲームでは、敵が能力だけでなくプレイヤーも必要とするので、いくつかのキャラクター固有の入力を必要とする静的メソッドを使うつもりだと思うが、まだ考えていない問題があるかもしれないだから私は似たようなシステムを使い終わるかもしれない。私はあなたのゲームがうまく行くことを望む! – kylengelmann
ありがとうございます。参考までに私のエフェクトシステムを少し変更する予定です。各キャラクターにはエフェクトの管理を担当するEffectHandlerコンポーネントがあります。これにより、エフェクトスタッキングやすべてを簡単にコントロールできるようになります。私は、GameObjectをMy EffectsのAddToHandler()メソッドに渡して、GetComponent()がnullでない場合は、エフェクト自体を登録することもできます。あなたが他の機能の設計について議論したいのであれば、私はUnityフォーラムと同じ名前で回答しています。 –
Sorade