我遇到了一个问题。我理解错误信息是什么:
Object reference not set to an instance of an object
表示,但我不确定为什么会出现此消息。我不确定为什么它不能引用它。我是Unity的新手。
我还在documents/UnityProjects/PongTutorial
创建了我的项目,其中PongTutorial
是此项目的名称。
我为Unity项目创建了一个文件夹,以便将它们保存在一起。在名为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
。
这些警告表示它们从未被分配给,因此将具有空值,这是真的。但是,我收到了object reference not set to an instance of an object
和topWall.size
行的topWall.center
。
我刚刚尝试创建新对象。例如,在Start
我有mainCam = new Camera()
,但这似乎不起作用。在视频中,在我的情况下,变量在GM或GameManager的Inspector中可见。但是,对我来说情况并非如此。
答案 0 :(得分:4)
首先需要公开变量,否则它们不会显示在检查器中:
public class GameSetup : MonoBehaviour {
public Camera mainCam;
public BoxCollider2D topWall, bottomWall, leftWall, rightWall;
public Transform player1, player2;
// rest of your code...
}
然后将一些游戏对象(附有适当的组件)拖动到检查器中的新字段中。这应该修复“未设置为对象实例的对象引用”错误消息。此错误消息基本上意味着您正在尝试对没有设置值的变量执行操作。
答案 1 :(得分:2)
只需将<Serialize>
装饰放在要在检查器中显示的成员上。
<Serialize>
Camera mainCam;
<Serialize>
private BoxCollider2D topWall, bottomWall, leftWall, rightWall;