Unity中的对象引用问题
本文关键字:问题 对象引用 Unity | 更新日期: 2023-09-27 18:08:56
我正在学习一个系列教程。
我遇到了一个问题。我明白错误信息是什么了:Object reference not set to an instance of an object
的意思是,但我不确定为什么会出现这个消息。我不确定为什么它不能引用它。我是Unity的新手。
我还在documents/UnityProjects/PongTutorial
中创建了我的项目,其中PongTutorial
是这个项目的名称。
UnityProjects
的文件夹中创建我的Unity项目,而不是在My Documents
文件夹中创建每个项目,会有问题吗?我创建了一个gameManager
,并附加了一个名为GameSetup
的脚本,其中该脚本中的代码是:
using UnityEngine;
using System.Collections;
public class GameSetup : MonoBehaviour
{
Camera mainCam;
BoxCollider2D topWall, bottomWall, leftWall, rightWall;
Transform player1, player2;
// Use this for initialization
void Start ()
{
}
// Update is called once per frame
void Update ()
{
topWall.size = new Vector2(mainCam.ScreenToWorldPoint(new Vector3(Screen.width * 2f, 0f, 0f)).x, 1f);
topWall.center = new Vector2(0f, mainCam.ScreenToWorldPoint(new Vector3(0f, Screen.height, 0f)).y + 0.5f);
}
}
我已经为这个脚本在MonoDevelop中清理,构建和重建了Assembly-CSharp
,以及MonoDevelop中的PongTutorial
,在那里我得到了关于mainCam
和BoxCollider2D
类型的所有变量的警告。
这些警告表示它们永远不会被赋值,因此将具有空值,这是true。然而,我得到topWall.size
和topWall.center
行的object reference not set to an instance of an object
。
我刚刚尝试创建新对象。例如,在Start
我有mainCam = new Camera()
,但这似乎不起作用。在视频中,变量在GM或GameManager的检查器中是可见的。
你首先需要把你的变量设置为公共的,否则它们将不会显示在检查器中:
public class GameSetup : MonoBehaviour {
public Camera mainCam;
public BoxCollider2D topWall, bottomWall, leftWall, rightWall;
public Transform player1, player2;
// rest of your code...
}
然后将一些游戏对象(带有适当的组件)拖动到检查器中的新字段中。这将修复"对象引用未设置为对象的实例"错误消息。这个错误信息基本上意味着你正在尝试在一个没有值设置的变量上做工作。
Jan解决了这个问题,但我只是想提供一个替代方案,以防您希望您的成员是私有的。
把<Serialize>
装饰放在你想要在检查器中显示的成员上。
<Serialize>
Camera mainCam;
<Serialize>
private BoxCollider2D topWall, bottomWall, leftWall, rightWall;