私はUnityのゲームで作業しています。複数のオブジェクト(ネット、ボックス、フープ)に衝突する複数のオブジェクト(リンゴ、オレンジ、バナナなど) 、など)。それぞれのマッチには特定の機能があります。 10個のオブジェクトと10個のコライダーオブジェクトがあるとすると、それは100個のメソッドです。 可能ならばswitch/if-elseステートメントを避けたいと思います。2つのパラメータを持つイベントを特定のメソッドにマップするためのエレガントな方法
現在、衝突が衝突型加速器のオブジェクトでトリガされ、その後、私は派遣に送信:
CollisionDispatchでpublic class NetCollision : BaseCollider {
CollisionDispatch dispatch;
void OnCollisionEnter (Collision coll)
{
Fruit obj = coll.gameObject.GetComponent<Fruit>();
dispatch.RegisterCollision (obj, this, coll);
}}
、私はそうのようなswitch文を持っている:
public void RegisterCollision(Fruit obj, BaseCollider collider, Collision collision) {
if (obj is Banana) {
BananaDispatch (obj as Banana, collider, collision)
} else if (obj is Apple) {
AppleDispatch (obj as Banana, collider, collision)
} ...
}
public void BananaDispatch (Banana obj, BaseCollider coll, Collision collision) {
if (coll is NetCollider) {
// Banana-NetCollider method
} else if (coll is BoxCollider) {
// Banana-BoxCollider method
} ...
}
は、このAですジェネリック医薬品を使用する状況?ジェネリック向けのリファクタリングを試しましたが、コードをクリーンアップしていないようです。
簡単な方法は、 'Dictionary>'を保ち、オブジェクト型に基づいてパラメータを渡すことです。 –
@ManfredRadlwimmerありがとう、私はこれを考慮した。しかし、2つの重要な辞書が必要です。果物とコライダーの両方がコールする関数を決定するので、私は辞書を2つ必要とします。関数はどこかで定義しなければならないので、私はそれに反対すると思うし、辞書は余計に見えた。 –