c# - 使用 Raycast 和 hitObject 编写脚本(使用 C#)
问题描述
Unity 中的脚本错误。C#初学者,我哪里错了?
这是错误:
Assets\Scripts\InteractHelper.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#
谢谢
解决方案
错误发生在 else 语句的最后一行,就在这里:
_objectInFocus = hitObject;
发生此错误是因为在您的 if 语句中声明了 hitObject,而此代码在您的 else 语句中;由于它们位于代码的不同部分,因此无法判断 hitObject 已被声明。
最好的解决方法是在 if 语句之前声明 hitObject。
例如,新代码将是
...
RaycastHit raycastInfo;
var hitObject = raycastInfo.transform.gameObject;
if(Physics.Raycast(ray, out raycastInfo))
{
...
而不是在同一区域有 hitObject。始终将其声明为 null 将导致不需要的行为。
推荐阅读
- javascript - 模拟导出为对象的 ES6 类模块
- core-data - 添加具有重复项的唯一约束的核心数据崩溃
- ffmpeg - 简单的 hls 服务器 - 从本地 NAS 流式传输
- algorithm - 到达目的地的最短天数 | 图形
- flutter - 面对 sliver appbar 的 RenderFlex 溢出问题
- java - Java 与 python AES PBKDF2。为什么输出不同?
- javascript - Uploading an Array to Firestore
- python - Python subprocess.Popen 与 wait() 的异步执行
- python - 有没有办法通过列表理解来做到这一点?
- java - 使用 Selenium 和 Java 在表中查找变量