Unity中3D物体和2D物体的碰撞、触发检测
一、添加组件
不论是2d还是3d的物体碰撞、触发检测之前,都要添加相应的组件collider,简单介绍几种比较常见的,Box Collider/Box Collider2D(箱式对撞机)、Capsule Collider/Capsule Collider2D(胶囊对撞机)、Sphere Collider/Sphere Collider2D(球形/圆形(2D)对撞机)、Mesh Collider/Mesh Collider2D(网格对撞机),
样式分别如下图:
1.箱式
2.胶囊
3.球形
4.网格
更多的可以参考:各种Collider的介绍
二、代码触发消息
首先需要自己定义谁是碰撞物体,谁是检测物体,两者都必须添加collider(我尝试了一下,可以添加不同种的collider),而且碰撞体还需要添加刚体rigidbody,其后在碰撞体上添加代码
//检测3D物体 private void OnTriggerEnter(Collider collision) { //碰撞时触发的消息 Debug.Log("碰撞到了"+collision.gameObject.name); } //检测2D物体 private void OnTriggerEnter2D(Collider collision) { //碰撞时触发的消息 Debug.Log("碰撞到了"+collision.gameObject.name); }
还有方法OnTriggerExit/OnTriggerExit2D碰撞结束时触发,OnTriggerStay/OnTriggerStay2D持续碰撞时触发(碰撞体在触发体内时,持续触发)。在此之外还有另一种不同的方法OnCollisionEnter、OnCollisionExit、OnCollisionStay,依次是碰撞时触发、碰撞结束触发、持续碰撞时触发。
关于两者的区别可以自行百度查找。
如果我们把上面collider中的isTrigger勾选的话,那么这个物体就变成了一个触发器,触发器哟普什么不同呢,碰撞体与触发器相碰时,会触发事件,但是同样不像碰撞检测那样产生物理效应,碰撞体会直接穿过触发器。
三、一些小思考
如果是做2D物体的碰撞检测,最好是将检测器的collider的IsTrigger勾选上,让其变成一个触发器,否则由于原物体的rigibody刚体使得碰撞时原物体发生旋转,从而改变运动方向,同样如果非要用的话,可以将原物体的移动方式改变成由rigidbody所控制的方法,具体的话可以自行百度。
- Unity 碰撞检测,触发检测,方向键控制物体移动
- Unity 2D 碰撞检测位置,生成烟雾实例化
- Unity 碰撞检测 中高速物体 直接穿透问题
- 【Unity入门】碰撞检测与触发检测
- unity 物体间的碰撞检测
- [Unity插件][Shader资源]Outline2D3D物体描边插件2D图片模糊灰度变色水滴特效插件
- 关于Unity中的碰撞检测和管理(2D)
- 【Unity 3D】碰撞检测
- Unity 3D 里的碰撞检测
- Unity3d 物体碰撞检测前提条件(OnTrigger触发条件)
- unity初识之2d游戏中做碰撞检测
- unity碰撞检测和触发信息
- Collider2D碰撞检测异常-Rotating sprite does not rotate collider[Unity]
- Unity射线检测3d,2D,正交透视。
- Unity 3D中的射线与碰撞检测
- Unity 3D 的 Collision碰撞 与 Trigger 触发的 区别
- Unity 3D 物体碰撞后实现连接
- 基于HTML5及WebGL开发的2D3D第一人称漫游进行碰撞检测
- HTML5实现3D和2D可视化QuadTree四叉树碰撞检测
- [Unity 3D] Unity 3D 里的碰撞检测