【发布时间】:2018-02-09 14:47:18
【问题描述】:
我无法为这个问题想出合适的标题,但我会解释一下。
我有一个碰撞盒,里面有一个脚本。该脚本有一个 if 语句,用于检测来自对象“Cube001”的冲突并将 Debug.Log 发送到控制台。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class cubeDetect : MonoBehaviour {
void OnCollisionEnter(Collision collision) {
if (collision.gameObject.name == "Cube001")
{
Debug.Log("Cube001 hit!");
}
}
}
使用这种方法,盒子碰撞器知道是什么立方体接触到了它,正如我所指示的那样
collision.gameObject.name == "Cube001"
但是如果我有 10 个立方体与碰撞框发生碰撞,我该如何更改 if 语句,而不是编写另外 9 个 if 语句来检查它是否触及碰撞框,我可以只使用 1 个 if 语句检测到来自另一个立方体的碰撞,知道哪个立方体撞到了盒子,并且有了这些知识,就能够执行 Debug.Log 来显示立方体击中了盒子。
我已尝试浏览 OnCollisionEnter 的文档,但找不到任何帮助。
【问题讨论】:
-
使用标签而不是对象名称进行检查(并且只将
name放在Debug.Log中) -
@UnholySheep 标记仍然需要许多
if语句。我认为 OP 希望删除执行此操作所需的许多if语句 -
嗨@UnholySheep,如果我使用标签,那么每个立方体本质上都是同一个对象,这只会将我的问题传播到多个对象
-
@toadflax 每个对象都有唯一的名称吗?
-
@toadflax 如果你给他们相同的标签,你仍然可以打印对象的唯一名称,正如我在下面的解决方案所述......因此确定碰撞的唯一对象。所有游戏对象的信息都存储在传递给 OnCollisionEnter 函数的碰撞对象中
标签: c# unity3d collision-detection