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会导致不必要的行为。