Unity2D碰撞无效问题和基本设置

最近开始学习unity,都是网站上找的一些白嫖的视频资源,然后也买了一些有关unity的比较新的书籍,这不论是视频还是书籍,讲述的内容主要讲的都是untiy3D,可能是因为unity2D功能是近几年才推出完善的,所以相关的书籍和教学内容比较少。对于初学的我来说,获取到合适的3D模型资源浪费时间和精力,所以我就用2D的项目来做一些练习。结果就遇到了设置2D碰撞无法检测的问题。
我所用的unity版本是2019.4.20.flc1(LTS),建立2D项目,但是所参照练习的书籍《Unity2D游戏开发从入门到精通》《unity3D 2D手机游戏开发第二版》包括我学的教学视频,建立的都是3D项目。我按照教学依次设置Box Collider 和RigidBody,设置好触发器,也在相关脚本中写入了OnTriggerEnter方法

private void OnTriggerEnter(Collider other)
    {
		Destroy(gameObject);
		Destroy(other.gameObject);
	}

运行项目后,什么都没有发生,我的子弹正常穿过敌人,碰撞检测没有生效。作为一个初学者,首先我想到的是代码错误,代码内容很少,检测过后没有任何问题,然后我由仔细检查组件是否设置错误,发现也没有错误,最后我想到我建立的是2D项目,应该用2D相关的组件,于是将上述组件都换成了Box Collider2D 和RigidBody2D,当我再次运行后,发现还是没有任何反应,我打开随书赠送的3D项目资源资源,运行正常,碰撞也发生了,可见书上的内容正确无误。可是我想要的2D项目下的碰撞设置问题并没有解决,昨晚我睡觉前,我还在搜“untiy2D碰撞检测无效的问题”,突然看到一个帖子上的一行代码上OnTriggerEnter2D的字样,恍然大悟,我的组件设置为了适应2D项目的组件,但是代码并没有做相应的修改。(代码没有因为修改两个组件报错),于是第二天早上我将上述代码做以下替换:

private void OnTriggerEnter2D(Collider2D collision)
    {
		Destroy(gameObject);
		Destroy(collision.gameObject);
	}

运行项目,成功实现我想要的碰撞后销毁物体的效果。

总结: 在Unity中2D项目和3D项目所用的碰撞组件有所不同,相关的类和方法也有所不同。2D项目中两个物体想要实现碰撞,首先为双发挂上Box Collider2D组件,根据需求勾选Is Trigger属性,然后至少为其中一个挂上RigidBody2D组件,将body type设置为kinematic,最后也要使用使用2D项目的方法,unity2d很多方法名称跟3d的基本相同,只是在后面多了2D两个字符,如果是用vs进行代码的编写,可以在编写的时候看提示后方有没有带2D字符的函数,直接调用。下面两张图片依次是我在子弹和敌人身上挂的组件。

unity2D碰撞 unity2d碰撞体积设置_2d游戏


unity2D碰撞 unity2d碰撞体积设置_unity_02


可能这是一个很小的问题,但是希望能够对和我一样的初学者有所帮助。