unity3d - 儿童对撞机没有被调用
问题描述
语境
我正在我的游戏中使用拾取系统。我有一个名为的组件AbstractSightCollider
,它有一个球体对撞机,还有一些AbstractPickupableObject
是要被拾取的对象。
AbstractSightCollider
附加到主角,但可以附加到任何活着的实体或任何能够包含库存对象的东西。
我设计它的方式是,当AbstractSightCollider
检测到一个对象时,它会触发一个 UnityEvent 调用PickupDetected
,当玩家离开拾取范围时,它会调用一个 UnityEvent 调用PickupLeave
问题
我无法制造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> { }
}
这里是属性:
谢谢你的时间
解决方案
我刚刚发现了问题。
OnCollisionEnter
并且OnCollisionExit
不是我需要听的事件,因为它们与刚体一起工作。我的 AbstractSight 是一个非实体抽象球体,允许实体抓取物品。
相反,我使用了OnTriggerEnter
,OnTriggerExit
现在它就像一个魅力。
推荐阅读
- reactjs - React:如何在回调中更改状态?
- python - 如何根据长度 Python 在多行上打印字符串?
- cognos-11 - 用于故事、仪表板和报告的 cognos 缓存
- session - 是否可以从我的后端注销 wso2is?
- javascript - 有没有办法将带有文件的多个对象发送到服务器
- keyboard - 如何使用组有效地控制键人键盘中的规范化?
- python - 如何正确训练 GAN
- python - 如何在张量流中将字符串张量填充到目标长度
- python - 如何将 python xx 更新为 python xx 保留所有包?
- python - 使用 Numba AoT 从扩展模块调用扩展模块