【问题标题】:I cant assign my GameObject variable. Please assist我无法分配我的 GameObject 变量。请协助
【发布时间】:2022-06-29 22:44:43
【问题描述】:

我正在尝试将 ScriptManager 分配给 ObjectManager,并使用以下行:

ObjectManager = GameObject.Find("ScriptManager");

我已多次检查以确保“ScriptManager”的拼写正确,我什至尝试直接从 Unity 复制粘贴名称。

我在运行时收到此错误:

"UnassignedReferenceException: Mining 的变量 ObjectManager 没有被赋值。 您可能需要在检查器中分配 Mining 脚本的 ObjectManager 变量。 UnityEngine.GameObject.GetComponent[T] () (在 :0) Mining.Sell () (at Assets/Mining.cs:49)"

很遗憾,我不能直接从检查器分配变量,因为附加代码的对象是使用预制件加载的。

这里是完整的代码:

    using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Mining : MonoBehaviour
{

public GameObject ObjectManager;
public Text WorkerCountText;
public float MiningSpeed;



public float WorkersInMine;
public float MiningMultiplyer;

public Collider2D collider;
public GameObject DropDown;


private float WorkerCount;

private float MineWorth;
private float Cash;


// Start is called before the first frame update
void Start()
{
    ObjectManager = GameObject.Find("ScriptManager");
    collider = GetComponent<Collider2D>();
    DropDown.SetActive(false);
}

// Update is called once per frame
void Update()
{
    Cash = ObjectManager.GetComponent<GenerateItems>().Money;
    WorkerCount = ObjectManager.GetComponent<GenerateItems>().Workers;
    MineWorth = ObjectManager.GetComponent<GenerateItems>().MineCost;
    
    WorkerCountText.text = "Workers:" + WorkerCount;  
   
}

public void Sell()
{
    ObjectManager.GetComponent<GenerateItems>().Money = Cash + MineWorth;
    Object.Destroy (this);
}
}

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我会改变将 ScriptManager 分配给 ObjectManager 的方式。 Find() 函数不是很可靠,如果层次结构或游戏对象的名称发生任何变化,该函数将找不到所需的游戏对象。

    有多种方法可以将 GameObject 分配给 ObjectManager,包括更可靠的函数 FindObjectOfType(),或者简单地创建变量:

    公共游戏对象对象管理器;

    然后将您的 ObjectManager 从层次结构拖到 ScriptManager GameObject 的检查器中。

    注意:如果您想使用 ObjectManager 的任何功能,您需要在 ScriptManager 的 Start 功能中获取该组件。

    【讨论】:

    • 就像我说的。我无法将 ObjectManager 分配给检查器,因为带有此脚本的对象是预制件,并且在用户“购买”之前不存在于游戏中。我将尝试使用 FindObjectOfType()。给我一秒钟
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 2022-01-08
      • 2023-04-07
      • 1970-01-01
      • 2012-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      相关资源
      最近更新 更多