首页 > 解决方案 > 儿童对撞机没有被调用

问题描述

语境

我正在我的游戏中使用拾取系统。我有一个名为的组件AbstractSightCollider,它有一个球体对撞机,还有一些AbstractPickupableObject是要被拾取的对象。

AbstractSightCollider附加到主角,但可以附加到任何活着的实体或任何能够包含库存对象的东西。

在此处输入图像描述 我设计它的方式是,当AbstractSightCollider检测到一个对象时,它会触发一个 UnityEvent 调用PickupDetected,当玩家离开拾取范围时,它会调用一个 UnityEvent 调用PickupLeave

问题

我无法制造OnCollisionEnterOnCollisionExit触发。

一些代码

这是附加到AbstractSightCollider

public class AbstractObjectSight : MonoBehaviour
{
    public OnPickupableDetected pickupDetected;
    public OnPickupableLeave pickupLeave;

    private void OnCollisionEnter(Collision col) {
        GameObject gameObject = col.gameObject;

        AbstractPickupableObject abstractPickupableObject =
            gameObject.transform.GetComponent<AbstractPickupableObject>();

        if (abstractPickupableObject != null) {
            pickupDetected.Invoke(abstractPickupableObject);
        }
    }

    private void OnCollisionExit(Collision col) {
        GameObject gameObject = col.gameObject;

        AbstractPickupableObject abstractInventoryObject =
            gameObject.transform.GetComponent<AbstractPickupableObject>();

        if (abstractInventoryObject != null) {
            pickupLeave.Invoke(abstractInventoryObject);
        }
    }

    [System.Serializable]
    public class OnPickupableDetected : UnityEvent<AbstractPickupableObject> { }
    [System.Serializable]
    public class OnPickupableLeave : UnityEvent<AbstractPickupableObject> { }
}

这里是属性:

在此处输入图像描述

谢谢你的时间

标签: unity3d

解决方案


我刚刚发现了问题。

OnCollisionEnter并且OnCollisionExit不是我需要听的事件,因为它们与刚体一起工作。我的 AbstractSight 是一个非实体抽象球体,允许实体抓取物品。

相反,我使用了OnTriggerEnterOnTriggerExit现在它就像一个魅力。


推荐阅读