您好我正在制作一个项目,其中有玩家或敌人的AI能够收集的收藏品,这将增加所拾取的任何内容的分数以及产生新的收藏品。对于我的玩家来说它工作得很好但是当我的敌人移动到应该是收藏品的触发对撞机时(这是一个预制件使用代码实例化,如果这会产生影响)没有任何反应。
void OnTriggerEnter(Collider other) {
Debug.Log ("hihihi");
if (other.gameObject.tag == "Player") {
Destroy (gameObject);
this.gameObject.SetActive(false);
other.gameObject.SendMessage("spawnNewPage");
GameObject.FindGameObjectWithTag("Start").SendMessage("FindPath");
other.gameObject.SendMessage("incrementScore");
}
if (other.gameObject.tag == "Start") {
Destroy (gameObject);
this.gameObject.SetActive(false);
GameObject.FindGameObjectWithTag("Player").SendMessage("spawnNewPage");
other.gameObject.SendMessage("FindPath");
other.gameObject.SendMessage("incrementScore");
}
}
是我目前在收藏预制件上的pickups.cs上使用的,但它不会触发我的敌人。播放器是统一的标准fps控制器预制件。是否有任何明显的我错过了我的敌人没有任何碰撞器或任何东西,但后来我的fps控制器也没有,所以我不认为这是问题。对我的所有标签进行了双重和三重检查,因此任何提示都将非常受欢迎。
答案 0 :(得分:2)
有一个表格显示何时在docs.unity3d.com上触发了碰撞和触发事件。但他们已更新网站,现在我无法找到它。我还有本地的。所以,就是这样。
根据两个碰撞对象的配置,可能会发生许多不同的操作。下面的图表概述了两个碰撞对象可以预期的结果,这些对象基于附加到它们的组件。某些组合只会导致两个对象中的一个受到碰撞的影响,因此请记住标准规则 - 物理不会应用于没有附加刚体的对象。
╔═══════════╦══════════╤═══════════╤═══════════╤══════════╤═══════════╤═══════════╗ ║ ║ Static │ Rigidbody │ Kinematic │ Static │ Rigidbody │ Kinematic ║ ║ ║ Collider │ Collider │ Rigidbody │ Trigger │ Trigger │ Rigidbody ║ ║ ║ │ │ Collider │ Collider │ Collider │ Trigger ║ ║ ║ │ │ │ │ │ Collider ║ ╠═══════════╬══════════╪═══════════╪═══════════╪══════════╪═══════════╪═══════════╣ ║ Static ║ │ Y │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Rigidbody ║ Y │ Y │ Y │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Kinematic ║ │ Y │ │ │ │ ║ ║ Rigidbody ║ │ │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Static ║ │ │ │ │ │ ║ ║ Trigger ║ │ │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Rigidbody ║ │ │ │ │ │ ║ ║ Trigger ║ │ │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Kinematic ║ │ │ │ │ │ ║ ║ Rigidbody ║ │ │ │ │ │ ║ ║ Trigger ║ │ │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╚═══════════╩══════════╧═══════════╧═══════════╧══════════╧═══════════╧═══════════╝
╔═══════════╦══════════╤═══════════╤═══════════╤══════════╤═══════════╤═══════════╗ ║ ║ Static │ Rigidbody │ Kinematic │ Static │ Rigidbody │ Kinematic ║ ║ ║ Collider │ Collider │ Rigidbody │ Trigger │ Trigger │ Rigidbody ║ ║ ║ │ │ Collider │ Collider │ Collider │ Trigger ║ ║ ║ │ │ │ │ │ Collider ║ ╠═══════════╬══════════╪═══════════╪═══════════╪══════════╪═══════════╪═══════════╣ ║ Static ║ │ │ │ │ Y │ Y ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Rigidbody ║ │ │ │ Y │ Y │ Y ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Kinematic ║ │ │ │ │ │ ║ ║ Rigidbody ║ │ │ │ Y │ Y │ Y ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Static ║ │ │ │ │ │ ║ ║ Trigger ║ │ Y │ Y │ │ Y │ Y ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Rigidbody ║ │ │ │ │ │ ║ ║ Trigger ║ Y │ Y │ Y │ Y │ Y │ Y ║ ║ Collider ║ │ │ │ │ │ ║ ╟───────────╫──────────┼───────────┼───────────┼──────────┼───────────┼───────────╢ ║ Kinematic ║ │ │ │ │ │ ║ ║ Rigidbody ║ Y │ Y │ Y │ Y │ Y │ Y ║ ║ Trigger ║ │ │ │ │ │ ║ ║ Collider ║ │ │ │ │ │ ║ ╚═══════════╩══════════╧═══════════╧═══════════╧══════════╧═══════════╧═══════════╝
在Unity 3.x中,我们引入了一种称为基于图层的碰撞检测,您现在可以选择性地告诉Unity GameObjects与它们所附着的特定图层发生碰撞。有关详情,请点击here。
答案 1 :(得分:1)
我认为评论和其他答案都是正确的。您可能想要为您的AI添加一个刚体,但如果您想要一个自定义解决方案(例如收藏品只能触发并且仅限于播放器和AI)您可以向AI添加特定图层并设置收藏品的碰撞器以考虑碰撞只有玩家和#34;自定义图层"。