RaycastHit.transform与RaycastHit.collider

在Unity中,使用Raycast获取点击物体的名字时,如果命中物体的父物体有RigidBody组件,hit.transform.name会返回父物体的名字而非实际命中的物体。正确获取命中的Collider所属物体名字的方法是使用hit.collider.name。这一行为在Unity文档中有说明,但容易被忽视,导致误解。
摘要由CSDN通过智能技术生成

今天遇到一个奇怪的问题,先看如下代码:

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”,好吧,文档中确实解释过了,但是这个解释是不是太敷衍了!太考验语文水平了!!太容易误解了!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值