首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >统一-将Collider2D转换为Collision2D

统一-将Collider2D转换为Collision2D
EN

Stack Overflow用户
提问于 2016-08-15 16:30:33
回答 2查看 885关注 0票数 0

我有两个函数,一个是OnCollisionEnter2D,一个是OnTriggerEnter2D。我需要将Collision2D转换为Collider2D,反之亦然:

代码语言:javascript
复制
//  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。我不能演这两个人。有人能帮我改一下或建议一个解决办法吗?

提前谢谢!!

编辑:

这是我的检查代码..。

代码语言:javascript
复制
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

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-15 16:58:30

您可以使用通用的方法

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-08-15 16:37:45

只需为foo()添加重载方法,如下所示:

代码语言:javascript
复制
//  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){

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38959058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档