2016-05-31 59 views
0

我正在开发一个非常小的Unity 5.4项目,我有几个“小球”,它们在游戏世界中有一个刚体2D和2D多边形对撞机。然后我也有一个球,它有一个刚体2D,多边形Colider和一个物理材料,可以让球弹跳到其他物体上。Unity 3D 5.4 2D Collisions不工作?

下面的代码被附加到球上的脚本会做些什么...什么时候它击中绿色小球,但没有任何反应。我实际上并不想让它退出应用程序,这仅仅是为了举例。

以下是两个对象的属性:

enter image description here

public class BallBounce : MonoBehaviour { 

    // Use this for initialization 
    void Start() { 
     //activate camera because I am lazy 
     var cam = GameObject.Find ("camera"); 
     var ball = GameObject.Find ("ball"); 
     Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
     cam.SetActive (true); 
        } 

    // Update is called once per frame 
    void Update() { 
      } 

    void OnCollisionEnter2D(Collision2D col) 
    { 
     if (col.gameObject.tag == "Bricks") { 
      Application.Quit(); 
     } 

    } 
} 
+0

中的应用。 Quit()在编辑器中不起作用。您必须构建游戏并将其作为独立应用程序来启动,以使应用程序退出。 – Matriac

+0

嘿谢谢。我改变它,试图摧毁它与接触的砖块也什么都不做: 更新代码: –

+0

无效OnCollisionEnter2D(Collision2D COL) \t { \t \t如果(col.gameObject.tag \t == \t“砖“){ \t \t \t Destroy \t(col.gameObject); \t \t} –

回答

0

Application.Quit();不会在编辑器中工作。它用于独立构建。更换与UnityEditor.EditorApplication.isPlaying = false;

现在,如果你想让它在这两个编辑器和独立建造工作:

void Start() 
{ 
    //activate camera because I am lazy 
    var cam = GameObject.Find ("camera"); 
    var ball = GameObject.Find ("ball"); 
    Rigidbody2D rb = GetComponent<Rigidbody2D>(); 
    cam.SetActive (true); 
    Debug.Log("Start Called!"); 
} 

void Update() 
{ 

} 

void OnCollisionEnter2D(Collision2D col) 
{ 
    Debug.Log("Collision detected: "+col.gameObject.name); 
    if (col.gameObject.tag == "Bricks") { 
     #if UNITY_EDITOR 
     UnityEditor.EditorApplication.isPlaying = false; 
     #else 
     Application.Quit(); 
     #endif 
    } 
} 

下一次测试时,如果事情是真的还是假的,干脆用Debug.Log("It works");

+0

感觉这里有些根本错误。甚至书面方式到控制台失败: –

+0

空隙OnCollisionEnter2D(Collision2D COL) \t { \t \t如果(col.gameObject.tag \t \t == “砖”){ \t \t \t的debug.log( “碰撞检测”); \t \t} \t \t} –

+0

@RaeMichelleRichards为什么不把的debug.log( “它的工作原理”);在你的启动功能,并检查你是否看到任何东西 – Programmer