我有两个函数,一个是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对撞机,而对撞机不是Collision2D。I have noticed that these two data types are almost the same。我不能演这两个人。有人能帮我改一下或建议一个解决办法吗?
提前谢谢!!
编辑:
这是我的检查代码..。
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
}发布于 2016-08-15 16:58:30
您可以使用通用的方法
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")
{
}
}发布于 2016-08-15 16:37:45
只需为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){
}https://stackoverflow.com/questions/38959058
复制相似问题