今天遇到一个奇怪的问题,先看如下代码:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit, Camera.main.farClipPlane, layerForHit))
{
onHitObject?.Invoke(hit);
}
else
{
onHitEmpty?.Invoke();
}
通常情况下,如果我想获取点击物体的名字,我会获取hit.transform.name这个变量。但是今天遇到一个问题,hit.transform.name获得的总是其上面特定个父物体的变量,当时第一反应觉得Unity一定是bug了,后来到Unity官方坛子去搜索一下,居然有人也提出了一样的质疑。但是得到的回复是,这不是个bug,只要点击的物体的某个父物体带有RigidBody,那么hit.transform.name一定是这个RigidBody组件所在的物体的名字,而要想获取自身的名字可以使用hit.collider.name。回头检查自己的场景,发现还真是如此:D
看了一下Unity的帮助文档,hit.transform返回的是“命中的RigidBody或碰撞体的Transform”,而hit.collider返回的是“命中的Collider”,好吧,文档中确实解释过了,但是这个解释是不是太敷衍了!太考验语文水平了!!太容易误解了!!!