Unity:拥有多个具有唯一名称的BoxColliders?

时间:2018-03-07 04:05:23

标签: c# unity3d

我正在尝试为棋盘游戏设置一个系统,我希望棋盘的每个单元都有自己的碰撞器,其唯一的名称格式如下:

  

[专栏] +" " + [row]

我遇到的问题是,当我创建一个新碰撞器时,所有先前碰撞器的名称都会更改为最新的碰撞器名称。所有对撞机的中心都不同,所以我很困惑为什么名称会改变,其他一切都保持不变。

private void Start()
{
    var offsetX = -3.5f;
    for (var x = 0; x < Board.Size; x++)
    {
        var offsetZ = -3.5f;
        for (var y = 0; y < Board.Size; y++)
        {
            var box = gameObject.AddComponent<BoxCollider>();
            box.size = new Vector3(1, 1, 1);
            box.center = new Vector3(offsetX, .5f, offsetZ);
            box.isTrigger = true;
            box.name = y + " " + x;
            offsetZ += 1f;
        }
        offsetX += 1f;
    }
}

是否可以让每个碰撞器设置一个唯一的名称,或者是否有一种不同的方式来确定点击发生在游戏对象的哪个位置?

1 个答案:

答案 0 :(得分:0)

每个MonoBehaviour都有一个生命周期方法OnCollisionEnter

void OnCollisionEnter(Collision collision)
{
    foreach (ContactPoint contact in collision.contacts)
    {
        Debug.DrawRay(contact.point, contact.normal, Color.white);
    }
}

请注意此函数的参数,您可以在其中找到有关所涉及的碰撞器的更多信息。您不必使用名称来识别对撞机。

var collider = collision.collider;  //Here you get which collider is involved
var center = collider.bounds.center;