首页 > 解决方案 > 为什么在 Unity 中没有调用 OnCollisonEnter2D?

问题描述

我有 2 个对象,一个以恒定速度向下移动,一个由玩家控制的对象。两个对象都有 BoxCollider2D 和 Rigidbody2D 但未调用附加到可控对象的 OnCollisonEnter2D 方法。两个对象都在相互碰撞,可见相互碰撞,只要冻结旋转未打开,它们就会旋转。Bellow 是 OnCollisonEnter2D 方法的代码。我究竟做错了什么?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

公共类碰撞:MonoBehaviour { public int Score;

public void OnCollisonEnter2D(Collider2D collision)
{
    GameObject collider = collision.gameObject;
    Debug.Log("Collided");
    //checks to see if the block is correct;
    if (collider.GetComponent<BlockBehavior>().correct)
    {
        Destroy(collision.gameObject);
        Score++;
    }
    else
    {
        this.gameObject.GetComponent<Movement>().gameOver = true;
    }
}

}

标签: unity3dcollision-detection

解决方案


我看到您对事件的命名已关闭。它应该是OnCollisionEnter2D。此外,参数不匹配。

它应该是:

private void OnCollisionEnter2D(Collision2D collision)
{
    GameObject collider = collision.gameObject;
    Debug.Log("Collided");
    //checks to see if the block is correct;
    if (collider.GetComponent<BlockBehavior>().correct)
    {
        Destroy(collision.gameObject);
        Score++;
    }
    else
    {
        this.gameObject.GetComponent<Movement>().gameOver = true;
    }
}

我也将所有这些类型的事件标记为私有(约定),因为您不希望将其暴露给另一个脚本。


推荐阅读