簡體   English   中英

Unity-將Collider2D轉換為Collision2D

[英]Unity - Convert Collider2D to Collision2D

我有兩個函數,一個是OnCollisionEnter2D,一個是OnTriggerEnter2D。 我需要將Collision2D轉換為Collider2D,反之亦然:

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

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

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

當然,這不會編譯,因為我正在提供foo collider,而collider不是Collision2D。 我注意到這兩種數據類型幾乎相同 我不能投這兩個。 有人可以幫我轉換或建議解決方法嗎?

提前致謝!!

編輯:

這是我的檢查代碼...

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

}

只需為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){

}

您可以使用通用方法

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")
    {

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM