OnCollisionEnter不会触发

时间:2014-06-09 18:41:51

标签: unity3d collision-detection

using UnityEngine;
using System.Collections;

public class changedirection : MonoBehaviour {

    void OnCollisionEnter(Collision col)
    {
        if (col.gameObject.name == "soldier")
        {
            GameObject go = col.gameObject;
            Move move = go.GetComponent<Move>();
            move.direction = -1;
        }
    }
}

碰撞的两个对象都是触发器,抱歉没有统一编程超过一年

1 个答案:

答案 0 :(得分:6)

静态对撞机不会相互碰撞。

有一个表格显示何时在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