Unity 切换抛出 NullReferenceException:对象引用未设置为对象的实例
Unity toggle throws NullReferenceException: Object reference not set to an instance of an object
在 Unity 中,我有一些简单的代码可以工作:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Test : MonoBehaviour {
public Toggle GridToggle;
// Use this for initialization
void Start () {
GridToggle.isOn = true;
print (GridToggle.isOn);
}
}
正如我所说,这工作得很好,将 'true' 记录到控制台。但是,我这里有第二批代码,几乎完全相同,但由于某些奇怪的原因,它似乎不起作用:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class GridManager : MonoBehaviour {
public Sprite[] gridColors = new Sprite[0];
public int defaultSprite = 0;
public Toggle GridToggle;
public SpriteRenderer spriteRenderer;
// Use this for initialization
void Start () {
//Same exact thing!
GridToggle.isOn = true;
print (GridToggle.isOn);
//Same exact thing!
spriteRenderer = GetComponent<SpriteRenderer> ();
spriteRenderer.sprite = gridColors [defaultSprite];
}
void Update () {
spriteRenderer = GetComponent<SpriteRenderer> ();
spriteRenderer.enabled = true;
}
}
这样做很奇怪:它将 'true' 记录到控制台,但与此同时,在显示 GridToggle.isOn = true;
的行上,它抛出:NullReferenceException:对象引用未设置为一个对象的实例。我希望第二个代码可以工作,但我无法弄清楚我做错了什么,以及它与第一位有何不同。
您提供的第一个示例在我测试时抛出相同的 NullReferenceException。听起来您已经通过 GUI 将 Toggle 附加到 Test 实例,但没有附加到 GridManager 实例。
检查将 GridManager 附加到 GameObject 的场景 GUI,并确保它没有在脚本详细信息中显示 Grid Toggle : None (Toggle)。如果是这样,那就是你的问题。执行您所做的任何操作,将 Toggle 对象分配给测试代码,以将其分配给 GridManager 代码。
在 Unity 中,我有一些简单的代码可以工作:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Test : MonoBehaviour {
public Toggle GridToggle;
// Use this for initialization
void Start () {
GridToggle.isOn = true;
print (GridToggle.isOn);
}
}
正如我所说,这工作得很好,将 'true' 记录到控制台。但是,我这里有第二批代码,几乎完全相同,但由于某些奇怪的原因,它似乎不起作用:
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.Collections.Generic;
public class GridManager : MonoBehaviour {
public Sprite[] gridColors = new Sprite[0];
public int defaultSprite = 0;
public Toggle GridToggle;
public SpriteRenderer spriteRenderer;
// Use this for initialization
void Start () {
//Same exact thing!
GridToggle.isOn = true;
print (GridToggle.isOn);
//Same exact thing!
spriteRenderer = GetComponent<SpriteRenderer> ();
spriteRenderer.sprite = gridColors [defaultSprite];
}
void Update () {
spriteRenderer = GetComponent<SpriteRenderer> ();
spriteRenderer.enabled = true;
}
}
这样做很奇怪:它将 'true' 记录到控制台,但与此同时,在显示 GridToggle.isOn = true;
的行上,它抛出:NullReferenceException:对象引用未设置为一个对象的实例。我希望第二个代码可以工作,但我无法弄清楚我做错了什么,以及它与第一位有何不同。
您提供的第一个示例在我测试时抛出相同的 NullReferenceException。听起来您已经通过 GUI 将 Toggle 附加到 Test 实例,但没有附加到 GridManager 实例。
检查将 GridManager 附加到 GameObject 的场景 GUI,并确保它没有在脚本详细信息中显示 Grid Toggle : None (Toggle)。如果是这样,那就是你的问题。执行您所做的任何操作,将 Toggle 对象分配给测试代码,以将其分配给 GridManager 代码。