我正在尝试为棋盘游戏设置一个系统,我希望棋盘的每个单元都有自己的碰撞器,其唯一的名称格式如下:
[专栏] +" " + [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;
}
}
是否可以让每个碰撞器设置一个唯一的名称,或者是否有一种不同的方式来确定点击发生在游戏对象的哪个位置?
答案 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;