使用Raycast和hitObject编写脚本(使用c#)



Unity脚本错误。c#初学者,我哪里做错了?

错误如下:

AssetsScriptsInteractHelper.cs(44,30): error CS0103: The name 'hitObject' does not exist in the current context
下面是我的代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InteractHelper : MonoBehaviour
{
public Material MaterialInGaze;
private Material _oldMaterial;
private GameObject _objectInFocus;
// Start is called before the first frame update
void Start()
{

}
// Update is called once per frame
void Update()
{
var ray = new Ray(Camera.main.transform.position,
Camera.main.transform.forward);
RaycastHit raycastInfo;
if(Physics.Raycast(ray, out raycastInfo))
{
var hitObject = raycastInfo.transform.gameObject;
if (hitObject == _objectInFocus)
return;
var renderer = hitObject.GetComponent<Renderer>();
if (renderer == null)
return;
_oldMaterial = renderer.material;
renderer.material = MaterialInGaze;
_objectInFocus = hitObject;
}
else
{
if (_objectInFocus == null)
return;
var renderer = _objectInFocus.GetComponent<Renderer>();
renderer.material = _oldMaterial;
_objectInFocus = hitObject;
}
}
}

我正在遵循一个教程(它现在有点过时了),但我的代码完全匹配他们的。我正在学习c#

谢谢

替换最后一行_objectInFocus = hitObject_objectInFocus = null

错误发生在else语句的最后一行,就在这里:

_objectInFocus = hitObject;

这个错误发生是因为hitObject是在if语句中声明的,而这段代码是在else语句中;由于它们位于代码的不同部分,因此无法判断是否已经声明了hitObject。

最好的解决方法是在if语句之前声明hitObject。

例如,新代码将是
... 
RaycastHit raycastInfo;
var hitObject = raycastInfo.transform.gameObject;
if(Physics.Raycast(ray, out raycastInfo))
{
... 

而不是在同一区域有hitObject。总是将其声明为null会导致不必要的行为。

最新更新