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

推荐订阅源

S
Secure Thoughts
P
Privacy International News Feed
T
Tenable Blog
L
Lohrmann on Cybersecurity
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
S
Securelist
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cisco Talos Blog
Cisco Talos Blog
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
P
Privacy & Cybersecurity Law Blog
Vercel News
Vercel News
Cyberwarzone
Cyberwarzone
月光博客
月光博客
T
The Blog of Author Tim Ferriss
Scott Helme
Scott Helme
爱范儿
爱范儿
Stack Overflow Blog
Stack Overflow Blog
C
Cisco Blogs
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
A
Arctic Wolf
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
L
LangChain Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Security Latest
Security Latest
Blog — PlanetScale
Blog — PlanetScale
G
GRAHAM CLULEY
V
Vulnerabilities – Threatpost
博客园 - 三生石上(FineUI控件)
I
InfoQ
Spread Privacy
Spread Privacy
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
MongoDB | Blog
MongoDB | Blog
C
CERT Recently Published Vulnerability Notes
A
About on SuperTechFans
博客园_首页
Engineering at Meta
Engineering at Meta
Project Zero
Project Zero
Latest news
Latest news

博客园 - 华安

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 让物体像实体一样碰撞。