我来这里是经过了一些测试,因为在谷歌搜索后,我无法找到一个直接的答案。
假设我有一个播放器字符,标记设置为Player,图层设置为Humanoid。我也有一群全国人大执行巡逻,漫游,和其他的运动行为。它们的标记设置为NPC,其层设置为Humanoid。因为这是一个使用2D物理的2D游戏,所以我用Project Settings碰撞矩阵来制作它,这样Humanoids就不会相互碰撞。
换句话说,在尊重重力、力、冲力等的同时,NPC和玩家角色可以通过对方。这很好用。当我想要一个NPC的子GameObject,它位于Default层,并且有一个Trigger类型的CircleCollider2D,为了执行一些操作(例如:显示对话、停止或切换父对象或其他对象的AI行为)时,我的问题出现了。
从我的测试来看,这似乎不起作用,但我可能做错了什么。所以我的问题是:
E 219>的子层,则会忽略与层Y中的GameObject C的冲突?<代码>H 220<代码>F 221private void OnCollisionEnter2D(Collision2D other) {
if (other.gameObject.CompareTag("Player")) {
Debug.Log("Collided with player");
}
if (!eventConsumed && other.gameObject.CompareTag("Player")) {
var draw = Random.Range(0.001f, 1.0f);
if (draw > 1.0f - eventChance) {
dialogueEvent.Play();
dialogueEvent = null;
}
eventChance = Mathf.Clamp(eventChance * 1.33f, 0.0f, 1.0f);
}
}发布于 2021-09-23 17:39:25
为了检测被设置为触发器的物理对撞机是否发生了碰撞。您需要使用OnTriggerEnter2D函数而不是OnCollisionEnter2D函数。
https://stackoverflow.com/questions/69280629
复制相似问题