Raycast报错“使用未赋值变量hit”,已声明仍无法排查原因
解决Unity射线检测“Use of unassigned variable”错误
错误原因
你只声明了RaycastHit hit变量,但没有通过射线检测方法为它赋值。编译器会判定这个变量未初始化,直接访问hit.transform必然触发“使用未赋值变量”的错误——此时hit里没有任何有效数据。
修复方案
必须调用Physics.Raycast()(或同类射线检测方法),通过out参数将射线命中结果存入hit变量,并且通过判断确保只有射线命中物体时,才去访问hit的属性。修复后的代码如下:
Vector3 screenPoint = new Vector3(cam.pixelWidth / 2, cam.pixelHeight / 2, 0); Ray ray = cam.ScreenPointToRay(screenPoint); RaycastHit hit; // 发射射线,命中时将数据存入hit if (Physics.Raycast(ray, out hit)) { GameObject hitObject = hit.transform.gameObject; PickUp target = hitObject.GetComponent<PickUp>(); // 可选:判断target是否存在,避免空引用 if (target != null) { // 在这里编写拾取逻辑 } }
关键说明
Physics.Raycast(ray, out hit)是核心:这个方法会发射你定义的射线,当射线碰撞到带有碰撞体的物体时,会把命中的详细信息(比如碰撞点、物体transform等)写入hit变量,此时hit才是有效的。- 用
if包裹后续逻辑:如果射线没有命中任何物体,hit仍然是未赋值状态,通过判断可以避免后续代码访问无效的hit属性,同时也能防止空引用异常。
内容的提问来源于stack exchange,提问作者Noah Robles
相关产品推荐
相关产品推荐

