目录
一. 简介
A、2D 碰撞体
-
概念与作用
- 2D 碰撞体是用于检测二维游戏对象之间是否发生物理碰撞的组件。当两个带有 2D 碰撞体的游戏对象接触时,Unity 的物理引擎会根据碰撞体的形状和属性来确定是否发生碰撞,并触发相应的碰撞事件。
- 碰撞体的主要作用是实现游戏中的物理交互,例如角色与地形的碰撞、物体之间的碰撞反弹等。
-
碰撞体类型
- 盒型碰撞体(Box Collider 2D):形状为矩形,适用于近似矩形的游戏对象。可以调整大小和位置以适应不同形状的物体。
- 圆形碰撞体(Circle Collider 2D):形状为圆形,适用于球形或近似圆形的物体。可以设置半径来调整碰撞范围。
- 多边形碰撞体(Polygon Collider 2D):可以自定义多边形形状,适用于不规则形状的物体。通过编辑顶点来调整碰撞体的形状。
-
碰撞体属性
- 标签(Tag):可以为碰撞体设置标签,以便在脚本中识别特定的碰撞对象。例如,可以设置一个 “Player” 标签用于玩家角色的碰撞体。
- 材质(Physics Material 2D):可以为碰撞体分配物理材质,以控制碰撞的摩擦、弹力等特性。不同的物理材质可以产生不同的碰撞效果。
- 触发碰撞(Is Trigger):当勾选此选项时,碰撞体将变为触发碰撞体,不会产生物理碰撞效果,但会触发相应的触发事件。
B、2D 触发器
-
概念与作用
- 2D 触发器是一种特殊类型的碰撞体,当两个带有触发器的游戏对象接触时,会触发相应的触发事件,而不会产生物理碰撞效果。
- 触发器通常用于检测特定区域的进入或离开,例如检测玩家是否进入了一个奖励区域、陷阱区域或触发剧情事件等。
-
触发事件
- OnTriggerEnter2D:当一个游戏对象进入触发器区域时触发。
- OnTriggerStay2D:当一个游戏对象在触发器区域内持续停留时触发。
- OnTriggerExit2D:当一个游戏对象离开触发器区域时触发。
-
与碰撞体的区别
- 碰撞体产生物理碰撞效果,会影响游戏对象的运动和物理状态。而触发器只触发事件,不会影响游戏对象的物理状态。
- 碰撞体通常用于实现物理交互,如碰撞反弹、阻挡等。触发器用于实现特定的游戏逻辑,如检测区域进入、触发剧情等。
C、使用方法与注意事项
-
使用方法
- 在 Unity 编辑器中,可以通过添加组件的方式为游戏对象添加 2D 碰撞体和触发器。可以选择不同的碰撞体类型,并调整其属性和参数。
- 在脚本中,可以通过检测碰撞事件和触发事件来实现相应的游戏逻辑。例如,当玩家角色与敌人的碰撞体发生碰撞时,可以减少玩家的生命值;当玩家进入一个奖励区域的触发器时,可以增加玩家的分数。
-
注意事项
- 合理选择碰撞体类型和触发器,避免过度使用复杂的碰撞体和触发器,以免影响游戏性能。
- 确保碰撞体和触发器的大小和位置正确设置,以确保准确的碰撞检测和触发事件。
- 在处理碰撞事件和触发事件时,要注意避免重复触发和错误的逻辑处理。
二. 组件详细说明
只是形状不一样,功能都是一样的,
点击上这个,碰撞体就变成了触发器,不会发生碰撞,但是仍会检测到物体碰撞的状态.
要使用碰撞体API,碰撞的双发需要一方有物理组件
接下来写个测试
首先双方组件
然后给 Square添加脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollCon : MonoBehaviour
{
private void OnCollisionEnter2D(Collision2D collision)
{
Debug.LogError("主角进入");
}
private void OnCollisionStay2D(Collision2D collision)
{
Debug.LogError("主角在范围内");
}
private void OnCollisionExit2D(Collision2D collision)
{
Debug.LogError("主角离开");
}
}
效果演示
勾选上触发器
就会发现阻挡和代码都不起作用
因为代码需要改为OnTrigger
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CollCon : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
Debug.LogError("主角进入");
}
private void OnTriggerStay2D(Collider2D collision)
{
Debug.LogError("主角在范围内");
}
private void OnTriggerExit2D(Collider2D collision)
{
Debug.LogError("主角离开");
}
}
效果
就可以看到Log正常打印了.
三. 自定义形状
选中之后就可以自定义形状
圆形碰撞体组件
三角形碰撞体组件