儿童对撞机不被叫

时间:2019-08-17 15:35:27

标签: unity3d

上下文

我在游戏中的拾取系统中工作。我有一个名为AbstractSightCollider的组件,它具有一个球体碰撞器和一些AbstractPickupableObject,它们是要拾取的对象。

AbstractSightCollider附加到主要角色,但可以附加到任何活动实体或任何能够包含清单对象的东西。

enter image description here 我的设计方式是,当AbstractSightCollider检测到一个对象时,它会触发一个名为PickupDetected的UnityEvent,而当玩家离开拾取范围时,它会称为一个称为PickupLeave的UnityEvent。 >

问题

我无法触发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> { }
}

这是属性:

enter image description here

感谢您的时间

1 个答案:

答案 0 :(得分:1)

确保两个对象(一个带有脚本的对象和一个将导致触发器的对象)都具有对撞机和刚体,我发现如果没有这些对象,触发器和碰撞将不起作用。