【发布时间】:2019-07-26 05:41:24
【问题描述】:
当我尝试从我的 levelGen 脚本中引用数组 gameObject 时发生空引用异常,由于检查器中的所有设置都正确,因此不确定如何修复它
我已经尝试在数组中引用 gameObject 的 int,直接调用它并弄乱我的实例化脚本的不同迭代,但似乎无法让它工作。
LevelGen 脚本
public GameObject[] blockPrefabs;
public GameObject[] blocks;
public int blockInt;
public GameObject blockInstance;
// Use this for initialization
void Start () {
//blocks = new GameObject[blockPrefabs.Length];
//for (int b = 0; b < blockPrefabs.Length; b++) {
//for (int y = 0; y < 5; y++) {
//for (int i = 0; i < 5; i++) {
//Duplicates square in each colour
//blocks [b] = (blockPrefabs
[b].gameObject); Random.Range (0,blockPrefabs.Length);
//blocks [b] = Instantiate(blocks [b],
new Vector3 (i * 5.0f, y * 5.0f, 0), transform.rotation);
for (int y = 0; y < 5; y++) {
for (int i = 0; i < 5; i++) {
blockInt = Random.Range (0,
blockPrefabs.Length);
Instantiate (blockPrefabs [blockInt], new
Vector3 (i * 5.0f, y * 5.0f, 0), transform.rotation);
Debug.Log (blockPrefabs);
光线投射脚本
if (Input.GetButtonDown ("Fire1")) {
Ray raycast = Camera.main.ScreenPointToRay
(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast (raycast, out hit)) {
if ((hit.collider != null) &&
(hit.collider.gameObject == levelgen.blockPrefabs[0])) {
redselect.redchange = true;
Debug.Log ("red clicked");
combinations ();
} else {
Debug.Log ("failed red");
}
能够单击实例化的对象来运行我的其余代码。在我点击它的那一刻,它返回空引用。
【问题讨论】:
-
您能先修复您问题中的代码吗?如果代码被注释掉,所以与问题无关,而是完全删除它。目前它有点被换行符弄乱了,甚至无法编译......你真的确定所有数组都在检查器中正确填充了吗?
-
异常到底是在哪一行抛出的?既然您说单击时会发生这种情况,似乎它与
Start方法无关...levelgen和redselect来自哪里?请添加完整的代码。另请注意,blockPrefabs包含来自场景的预制件而不是实例化对象 => 在hit.collider.gameObject == levelgen.blockPrefabs[0])中的场景引用和预制件之间的检查永远不会为真。 -
嘿 derHugo,如果有人在其他代码尝试中看到了可行的解决方案,我将代码留在其中,应该注释掉 start 和 for int y 之间的任何内容。我还意识到 blockint 应该是块而不是 blockPrefabs,因为这得到了我的随机级别。只填写blockPrefab数组,其他数组留空。