unity实现2D人物从上面踩踏敌人,敌人减血的简易方法(类似马里奥的攻击手段)

这个问题很多小白一查AI,发现实现很复杂。其实有个最简单的办法,当然这个肯定没有复杂的精确,但是也很直白和好理解。

方法就是在敌人头顶部分放一个碰撞体,然后勾选触发器,然后脚本直接检测玩家是否碰到这个触发器即可。


如果想要更精确的,可以通过 碰撞接触点的相对位置 ,判断玩家的 Y 坐标(垂直方向)是否在敌人之上

具体来说就是

  • 获取碰撞发生时,玩家与敌人接触点或相对位置
  • 判断 玩家的底部(或中心点的 Y)是否高于敌人的顶部(或中心点的 Y),即玩家在敌人上方。

这样就能确保玩家是踩在敌人的头上。


我查了AI,发现上面的还不是最精确的,更精确的方案是(使用 OnCollisionEnter + Contact Points,非 Trigger)

如果你 不想用 isTrigger,而是用物理碰撞,可以这样写(也是 3D 示例):

cs 复制代码
private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        // 遍历所有接触点
        foreach (ContactPoint contact in collision.contacts)
        {
            // 判断接触点的法线方向 ------ 如果法线朝上(即玩家是从上方压下来的)
            if (contact.normal.y > 0.5f) // 法线的 Y 分量较大,说明是从上方接触
            {
                TakeDamage(10);
                return;
            }
        }
    }
}

🔍 解释:

  • contact.normal 是碰撞点处的表面法线,指向 碰撞体的外部
  • 当玩家从上方踩敌人时,法线的 Y 分量通常是 正且比较大(比如 > 0.5 或 0.7),表示接触面是"从上往下的"。
  • 这种方法更物理、更准确,推荐使用!

总结推荐方案

方式 是否用 Trigger 推荐度 特点
OnTriggerEnter + 法线 / Bounds 判断 ✅ 是 ⭐⭐⭐⭐ 简单常用,适合大多数 3D 踩踏需求,推荐使用 contact.normal 判断方向
OnCollisionEnter + 检查法线方向 ❌ 否 ⭐⭐⭐⭐⭐ 最准确,通过物理碰撞的法线判断玩家是否从上方踩踏,推荐!
OnTriggerEnter + Y 坐标比较 ✅ 是 ⭐⭐⭐ 简单但不够精确,适合快速原型

🧪 如果你想要一个最靠谱的踩踏检测(推荐这样做):

👉 使用 OnCollisionEnter(不开启 isTrigger),然后通过 collision.contacts0.normal.y > 0.5f 来判断是否从上方踩中。

示例(3D,推荐):

cs 复制代码
private void OnCollisionEnter(Collision collision)
{
    if (collision.gameObject.CompareTag("Player"))
    {
        ContactPoint contact = collision.contacts[0];
        if (contact.normal.y > 0.5f) // 从上方踩下来
        {
            // 扣血逻辑
            TakeDamage(10);
        }
    }
}
相关推荐
叶帆15 天前
【YFIOs】用C#开发硬件之设备上云
开发语言·unity·c#
久数君15 天前
AI三维建模工具“造形家”:地理场景三维化的高效解决方案
unity·glb·ai算法·ai三维建模工具·地图框选·造形家·城市建筑模型
会思考的猴子16 天前
Unity VFX 属性 Postion 和 TargetPostion
unity
hai31524754316 天前
九章编程法 · 猜数字游戏 (GW-BASIC 重构版) *
人工智能·microsoft·游戏引擎·游戏程序
心前阳光16 天前
Unity资源导入之自动化资源导入
unity·自动化·游戏引擎
心前阳光16 天前
Unity之2021.3.45f2c1发布安卓程序遇到的问题
android·unity·游戏引擎
纪纯16 天前
PicoVR Unity Integration SDK 3.4 常用交互API
unity·游戏引擎·vr·pico
龙智DevSecOps解决方案16 天前
3A 游戏优化技术栈:如何打通引擎级分析工具与 DevOps 持续集成管线?
unity·性能优化·游戏开发·技术美术·perforce·unrealengine
葛兰岱尔16 天前
从 SolidWorks 到 Three.js,从 Inventor 到 Unity——制造业CAD模型“几何-语义一体化“转换,不再是天方夜谭!
开发语言·javascript·unity
鼎艺创新科技16 天前
三维电子沙盘中OSGB倾斜摄影数据的加载与渲染
游戏引擎·cocos2d