You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拾取掉落物品且避免角色受物理碰撞影响?

解决物品拾取时物理碰撞影响角色的问题

方案1:改用触发器实现拾取检测

  • 将物品的Capsule Collider勾选Is Trigger,这样碰撞不会产生物理推力,仅触发触发事件
  • 在物品脚本中实现触发逻辑:
    void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("Player"))
        {
            // 执行拾取逻辑:物品计数自增、销毁物品
            InventoryManager.Instance.IncreaseItemCount(itemId);
            Destroy(gameObject);
        }
    }
    
  • 注意:玩家的碰撞器不要勾选Is Trigger,物品必须带有非Kinematic的Rigidbody,才能保证触发事件正常触发,同时保留掉落的物理效果

方案2:双碰撞器分离物理交互与拾取检测

如果需要物品保留和平台的物理碰撞,同时避免与玩家的物理阻挡:

  • 给物品添加两个Capsule Collider:
    • 第一个(物理碰撞用):关闭Is Trigger,层设为ItemPhysics,在Physics设置的Layer Collision Matrix中,仅与Platform层开启碰撞
    • 第二个(拾取检测用):勾选Is Trigger,层设为ItemPickup,仅与Player层开启碰撞
  • 拾取逻辑写在第二个碰撞器的OnTriggerEnter事件中,这样物品既能正常掉落在平台上,又能无物理阻挡地触发拾取

方案3:拾取瞬间禁用物品物理(快速处理)

如果不想修改碰撞器结构,可以在碰撞检测到玩家时立刻禁用物理:

void OnCollisionEnter(Collision collision)
{
    if (collision.collider.CompareTag("Player"))
    {
        GetComponent<Rigidbody>().isKinematic = true; // 立即停止物理交互
        InventoryManager.Instance.IncreaseItemCount(itemId);
        Destroy(gameObject);
    }
}
  • 这个方案能减少物理反馈的时间,但可能仍有极短暂的卡顿,优先级低于前两个方案

内容的提问来源于stack exchange,提问作者system detector

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 22:05:00