【问题标题】:Unity 3D 5.4 2D Collisions Not Working?Unity 3D 5.4 2D 碰撞不起作用?
【发布时间】:2016-05-31 03:33:50
【问题描述】:

我正在开发一个非常小的 Unity 5.4 项目,我有几个“颗粒”,在游戏世界中,它们附加了刚体 2D 和 2D 多边形对撞机。然后我还有一个球,它有一个 2D 刚体、多边形对撞机和一个物理材质,它可以让球反弹到其他物体上。

以下代码附加到球上的脚本会做一些事情......当它击中绿色颗粒但没有任何反应时。我实际上并不希望它退出应用程序,这只是出于示例目的。

以下是两个对象的属性:

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 ();
        }

    }
}

【问题讨论】:

  • Application.Quit() 在编辑器中不起作用。您必须构建您的游戏并将其作为独立的游戏启动,以使应用程序退出。
  • 嘿,谢谢。我改变了它,试图摧毁它接触到的砖块,但什么也没做:更新代码:
  • void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.tag == "Bricks") { Destroy (col.gameObject); }

标签: c# unity3d 2d collision


【解决方案1】:

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");

【讨论】:

  • 感觉这里有一些根本性的错误。甚至写入控制台失败:
  • void OnCollisionEnter2D(Collision2D col) { if (col.gameObject.tag == "Bricks") { Debug.Log ("Collision Detected"); } }
  • @RaeMichelleRichards 为什么不放 Debug.Log("It works");在您的开始功能中检查您是否看到任何内容
  • 移动碰撞检测会导致编译器错误
  • @RaeMichelleRichards 我用一堆 Debugs.Log 再次更新了我的答案。请复制代码并将其替换为您的代码。告诉我您在控制台日志中看到的内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
相关资源
最近更新 更多