惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
V
Visual Studio Blog
博客园 - 司徒正美
TaoSecurity Blog
TaoSecurity Blog
博客园 - 聂微东
IT之家
IT之家
博客园_首页
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
博客园 - Franky
雷峰网
雷峰网
罗磊的独立博客
S
Schneier on Security
C
Cybersecurity and Infrastructure Security Agency CISA
The Cloudflare Blog
T
Tailwind CSS Blog
B
Blog RSS Feed
H
Help Net Security
T
The Blog of Author Tim Ferriss
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
C
CERT Recently Published Vulnerability Notes
博客园 - 三生石上(FineUI控件)
P
Palo Alto Networks Blog
I
Intezer
G
GRAHAM CLULEY
Engineering at Meta
Engineering at Meta
S
Securelist
J
Java Code Geeks
V
V2EX
Y
Y Combinator Blog
Simon Willison's Weblog
Simon Willison's Weblog
L
LINUX DO - 热门话题
云风的 BLOG
云风的 BLOG
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
P
Privacy International News Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
B
Blog
Forbes - Security
Forbes - Security
Google Online Security Blog
Google Online Security Blog
Help Net Security
Help Net Security
S
SegmentFault 最新的问题
N
Netflix TechBlog - Medium
Webroot Blog
Webroot Blog
Microsoft Security Blog
Microsoft Security Blog
SecWiki News
SecWiki News
Scott Helme
Scott Helme
aimingoo的专栏
aimingoo的专栏
N
News and Events Feed by Topic

博客园 - 华安

Unity 中区别,public 和 [SerializeField] asp.netCore中给动态请求路径加客户端缓存 netCore中获取客户端真实的IP引起的思考 Unity 相机:正交 (Orthographic) vs 透视 (Perspective) unity中的button中的onclick控制面板中四个参数的意思分别是什么 微信小程序开发中触发 onshow的几种特殊情况 SQL Server备份心得 MYSQL 备份数据库 微信与支付支付功能开发 微信小程序中页面配置下拉刷新 unity中 相机没有视锥效果线框了,如何打开 JSONPath表达式 C# 中的操作JSON类 JObject cookie中的 HttpOnly 、Secure、SameSite 解释 Spring-boot 中基于 IP 的限流和自动封禁 Filter 登录 用 HMAC-SHA256 实现 TwoFA(二重验证)的坑 利用Spring Boot的 filter 结合ConcurrentHashMap 实现“同一IP每分钟最多允许300个404请求,超出后禁用30分钟访问” pixi-filters中的BackdropBlurFilter使用注意事项 PixiJS中的 SplitBitmapText.chars中的每个 BitmapText的x值分析 legend隐藏不想显示的图例 spring-boot HttpServletResponse response.sendRedirect是会跳转到 http而不是https springboot获取post请求参数 Javascript如何判断是触摸屏还是PC端 JavaScript获取鼠标点一个元素,获取鼠标点击的元素内的位置 spring-boot中配置Mongodbd的问题小结 Rest Template中添加 PATCH请求。 CSS实现修改CheckBox样式 SpringBoot+Thyemleaf报错:Error resolving template Template might not exist or might not be accessible div display flex 如何出现横向滚动条
Unity中 onCollisionEnter2D与OnTriggerEnter2D 区别
华安 · 2026-07-25 · via 博客园 - 华安

在 Unity 2D 中,OnCollisionEnter2DOnTriggerEnter2D 是两种不同的碰撞检测回调方法,它们的主要区别在于物理响应和触发条件。

核心区别

1. 物理碰撞 vs 触发检测

特性OnCollisionEnter2DOnTriggerEnter2D
物理效果 ✅ 有物理碰撞(反弹、摩擦等) ❌ 无物理碰撞(直接穿透)
碰撞体类型 必须勾选 Is Trigger = false 必须勾选 Is Trigger = true
相互穿透 不会穿透,会被推开 可以穿透(无物理阻挡)
适用场景 物理碰撞、物体互动 区域检测、事件触发

2. 回调参数类型

// 物理碰撞 - 提供碰撞详细信息
void OnCollisionEnter2D(Collision2D collision)
{
    // 可以获取碰撞点、法线、相对速度等物理信息
    Vector2 contactPoint = collision.contacts[0].point;
    float impactForce = collision.relativeVelocity.magnitude;
}

// 触发器 - 仅提供碰撞体引用
void OnTriggerEnter2D(Collider2D other)
{
    // 只能获取进入触发器的碰撞体,无物理细节
    // 常用于检测是否进入某个区域
}

实际应用场景

OnCollisionEnter2D 适用场景

  • 物理碰撞效果:球撞墙反弹、角色踩到平台
  • 需要碰撞力信息:计算伤害、破坏效果
  • 物体推动:推箱子、打飞物体

OnTriggerEnter2D 适用场景

  • 区域检测:进入伤害区域、收集宝物
  • 门/开关:角色靠近自动开门
  • 隐形墙壁:限制玩家移动但不显示碰撞
  • 检测范围:敌人巡逻范围、警戒区

代码示例对比

// 物理碰撞示例
public class Player : MonoBehaviour
{
    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("Enemy"))
        {
            // 根据碰撞力度计算伤害
            float damage = collision.relativeVelocity.magnitude * 10;
            HP -= damage;
        }
    }
}

// 触发器示例
public class Coin : MonoBehaviour
{
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            // 拾取金币,无需物理效果
            ScoreManager.AddCoin(1);
            Destroy(gameObject);
        }
    }
}

配置要求

碰撞检测条件

要触发回调,两个物体必须满足:

  1. 两者都有 Collider2D(碰撞体组件)
  2. 至少一个刚体(Rigidbody2D,可以是 Kinematic)

不同组合的行为

物体A物体B结果
普通碰撞体 普通碰撞体 ✅ 触发 OnCollisionEnter2D + 物理效果
触发器 普通碰撞体 ✅ 触发 OnTriggerEnter2D
触发器 触发器 ✅ 触发 OnTriggerEnter2D
普通碰撞体 普通碰撞体(无Rigidbody) ❌ 不触发任何回调

性能考虑

  • OnTriggerEnter2D 通常更高效,因为不需要计算物理碰撞响应
  • OnCollisionEnter2D 需要额外处理物理计算(摩擦力、弹性系数等)
  • 大量触发器比大量碰撞体性能更好

选择建议

  • 需要物理效果(反弹、摩擦、力)→ 使用 OnCollisionEnter2D
  • 仅需要检测(进入区域、收集物品)→ 使用 OnTriggerEnter2D
  • 不确定时,优先使用触发器,因为性能更好且更容易控制

记住:Trigger 让物体像幽灵一样穿过,Collision 让物体像实体一样碰撞。