2016-08-15 8 views
0

私は2つの機能を持っています.1つはOnCollisionEnter2D、もう1つはOnTriggerEnter2Dです。私はCollider2Dまたはその逆にCollision2Dを変換する必要があります。もちろんUnity - Collider2DをCollision2Dに変換

// c# script 
void OnCollisionEnter2D(Collision2D collision) { 
    foo(collision); 
} 

void OnTriggerEnter2D(Collider2D collider) { 
    foo(collider); 
} 

void foo(Collision2D coll){ 
    //checking inside here 
} 

、これは私がfooのコライダーを与えているので、コンパイルするつもりはない、とコライダーがCollision2Dではありません。 I have noticed that these two data types are almost the same。私はこれらの2つをキャストできません。誰かが私に変換を促したり、回避策を提案したりできますか?

ありがとうございます!

編集:

これは私のチェックコードです...

int coins; 

void Start(){ 
    coins = 0; 
} 

void foo(Collision2D coll){ 
    if(coll.gameObject.tag == "coin"){ 
     coins++; 
    } 
//this works for both Collision2D and Collider2D because both have the gameObject property 

} 

答えて

1

あなたは一般的なMethodeのを使用することができます

void OnCollisionEnter2D(Collision2D collision) 
{ 
    foo<Collision2D>(collision); 
} 

void OnTriggerEnter2D(Collider2D collider) 
{ 
    foo<Collider2D>(collider); 
} 


public void foo<T>(T c) 
{ 
    GameObject g; 

    if (typeof(T) == typeof(Collider2D)) 
    { 
     Collider2D obj = (Collider2D)(object)c; 
     g = obj.gameObject; 
    } 
    else { 
     Collision2D obj = (Collision2D)(object)c; 
     g = obj.gameObject; 
    } 

    Debug.Log(g.tag); 

    if (g.tag == "coin") 
    { 

    } 
} 
1

ただ、このようなfoo()のために過負荷メソッドを追加します。

// c# script 
void OnCollisionEnter2D(Collision2D collision) { 
    foo(collision); 
} 

void OnTriggerEnter2D(Collider2D collider) { 
    foo(collider); 
} 

void foo(Collision2D coll){ 
    //checking inside here 
} 


void foo(Collider2D coll){ 

} 
+0

ありがとう!これは素晴らしいことです... 2つのオーバーロードの間にコードをコピー&ペーストすることなくこれを行うことができる方法はありますか? – yummypasta

+1

。 TBHでは、コライダーコンポーネントはトリガーまたはコライダーとしてしか動作できません。したがって、1つのcolliderコンポーネントに対して 'OnCollisionEnter()'と 'OnTriggerEnter()'を両方とも登録することは無意味です。実際に何をしようとしているのかを教えてもらえればもっと助けることができるので、 'foo()'の実装もやってください。 –

+0

そして、ゲーム開発のようなパフォーマンスクリティカルなコードに取り組んでいるときは、計算を少なくして最適化された効率的なコードを書くようにしてください。重複したコードを持つことは大きな問題ではありません。 –

関連する問題