【发布时间】:2019-08-19 21:20:31
【问题描述】:
上下文
我在我的游戏中使用拾取系统。我有一个名为AbstractSightCollider 的组件,它有一个球体碰撞器和一些AbstractPickupableObject,它们是要被拾取的对象。
AbstractSightCollider 附在主角身上,但可以附在任何活着的实体或任何能够包含物品栏对象的东西上。
我设计的方式是,当AbstractSightCollider检测到一个物体时,它会触发一个名为PickupDetected的UnityEvent,当玩家离开拾取范围时,它会调用一个名为PickupLeave的UnityEvent
问题
我无法触发 OnCollisionEnter 和 OnCollisionExit。
一些代码
这是附加到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