【问题标题】:Getting a NullReferenceException when trying to Instantiate a GameObject尝试实例化游戏对象时获取 NullReferenceException
【发布时间】:2020-05-19 03:55:15
【问题描述】:

我正在根据在线教程编写 JRPG,以尝试学习 Unity 和 C# 代码。这是一个用于创建要攻击的敌方单位菜单的程序:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
//using UnityEngine.Experimental.UIElements;

public class CreateEnemyMenuItem : MonoBehaviour {

    [SerializeField]
    private GameObject targetEnemyUnitPrefab;

    [SerializeField]
    private Sprite menuItemSprite;

    [SerializeField]
    private Vector2 initialPosition, itemDimensions;

    [SerializeField]
    private KillEnemy killEnemyScript;

    private void Awake()
    {
        GameObject enemyUnitsMenu = GameObject.Find("EnemyUnitsMenu");

        GameObject[] existingItems = GameObject.FindGameObjectsWithTag("TargetEnemyUnit");

        Vector2 nextPosition = new Vector2(this.initialPosition.x + (existingItems.Length * this.itemDimensions.x), this.initialPosition.y);

        GameObject targetEnemyUnit = Instantiate(this.targetEnemyUnitPrefab, enemyUnitsMenu.transform) as GameObject;

        targetEnemyUnit.name = "Target" + this.gameObject.name;
        targetEnemyUnit.transform.localPosition = nextPosition;
        targetEnemyUnit.transform.localScale = new Vector2(0.7f, 0.7f);
        targetEnemyUnit.GetComponent<Button>().onClick.AddListener (() => selectEnemyTarget());
        targetEnemyUnit.GetComponent<Image>().sprite = this.menuItemSprite;

        killEnemyScript.menuItem = targetEnemyUnit;
    }

    public void selectEnemyTarget()
    {

    }
}

在第 29 行(targetEnemyUnit 被实例化)在游戏测试期间,我收到一个 NullReferenceException 错误,我认为这意味着 Instantiate 不起作用(它也在此处突出显示,但在 Visual Studio 中没有)。我主要是根据教程工作,但这匹配,我不确定我在这里到底做错了什么。

【问题讨论】:

标签: c# unity3d game-engine


【解决方案1】:

在检查器中未设置 targetEnemyUnitPrefab,在这种情况下,您只需单击包含此脚本的 GameObject,在检查器中将您的预制件拖放到“targetEnemyUnitPrefab”或没有正确标记enemyUnitsMenu,在这种情况下单击应该被标记的“GameObject”,并确保在检查器的右上角将其标记为“EnemyUnitsMenu”

请注意,当您创建新标签并选择游戏对象时,它不会应用该标签,您必须返回游戏对象并从下拉列表底部选择它。

GameObject targetEnemyUnit = Instantiate(this.targetEnemyUnitPrefab, enemyUnitsMenu.transform) as GameObject;

【讨论】:

    【解决方案2】:

    好的,你有一个私有对象作为预制件 -> 私人游戏对象 targetEnemyUnitPrefab

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多