首页 > 解决方案 > OnTriggerEnter2D 被未标记为触发器的碰撞器触发?

问题描述

我正在开发一个标准的 Top-Down 2D RPG。在我的 Player 对象上,我有两个对撞机,一个是常规的 2D 盒式对撞机,未标记为处理碰撞的触发器,它垂直小于玩家。我有另一个盒子对撞机 2D,它被标记为触发器,作为一种碰撞盒工作,它覆盖了整个玩家。在拾取物品时,我想使用触发对撞机,所以我使用了以下代码:

private void OnTriggerEnter2D(Collider2D other)
{
    if (other.GetComponent<DroppedItem>() != null && other.isTrigger)
    {
        Debug.Log("Picked up item.");
        DroppedItem item = other.GetComponent<DroppedItem>();
        inventory.AddItem(item.item, item.itemAmount);
        Destroy(item.gameObject);
    }
}

每次我与丢弃的项目发生碰撞时都会触发两次调试消息,该项目也有一个触发对撞机,即使我随后销毁了该项目。如果我将触发器对撞机标记为非触发器,则调试消息也会触发两次,反之亦然。我该如何避免这种情况?

标签: c#unity3d

解决方案


看来您需要播放器上安装碰撞器,并在物品上安装触发器。然后,需要在项目上附加一个脚本,该脚本调用播放器上添加项目的函数,然后在脚本中您可以销毁该项目。我能想到为什么要调用两次的唯一原因是您的脚本同时在项目和播放器上。

简单图

(带有一些伪代码的简单图表)


推荐阅读