我在游戏中的拾取系统中工作。我有一个名为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> { }
}
这是属性:
感谢您的时间
答案 0 :(得分:1)
确保两个对象(一个带有脚本的对象和一个将导致触发器的对象)都具有对撞机和刚体,我发现如果没有这些对象,触发器和碰撞将不起作用。