List 使用unity更新图像用户界面

List 使用unity更新图像用户界面,list,unity3d,methods,gameobject,List,Unity3d,Methods,Gameobject,我试图制作一个程序来更新玩家每回合的红心数量(满心、半心和空心)。当我这样做的时候,我实例化了一个预置的游戏对象作为变量,然后将它分配给unity中的UI面板。但是(我不确定,但我认为)之前更新中使用的变量在下一个循环中被销毁后仍然被引用,这给了我一个错误: MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it. 以下

我试图制作一个程序来更新玩家每回合的红心数量(满心、半心和空心)。当我这样做的时候,我实例化了一个预置的游戏对象作为变量,然后将它分配给unity中的UI面板。但是(我不确定,但我认为)之前更新中使用的变量在下一个循环中被销毁后仍然被引用,这给了我一个错误:

MissingReferenceException: The object of type 'GameObject' has been destroyed but you are still trying to access it.
以下是更新循环:

void Update()
{
    if (HP <= 0)
    {
        anim.SetBool("Death", true);
        Destroy(GameObject.Find("Hearts"));
        Destroy(GameObject.Find("Inventory"));
        text.alignment = TextAnchor.LowerCenter;
        text.text = "\n YOU DIED";
        text.fontSize = 150;
        text.color = new Color(255, 0, 0);
    } else {
        foreach (Transform child in GameObject.Find("Hearts").transform)
        {
            Destroy(child.gameObject);
        }
        for (var i = 0; i<(int)HP; i++)
        {
           GameObject Heart = Instantiate(heart, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
            Heart.transform.SetParent(GameObject.Find("Hearts").transform);
        }
        if (HP - (float)((int)HP) == 0.5F) {
            GameObject HalfHeart = Instantiate(halfheart, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
            HalfHeart.transform.SetParent(GameObject.Find("Hearts").transform);
        }
        for (var i =0; i<Mathf.Floor(MaxHP-HP); i++)
        {
            GameObject EmptyHeart = Instantiate(emptyheart, new Vector3(0, 0, 0), Quaternion.identity) as GameObject;
            EmptyHeart.transform.SetParent(GameObject.Find("Hearts").transform);
        }
    }
void Update()
{

if(HP问题是,一旦HP降到零以下,每次后续更新都会输入第一个if语句,并尝试一次又一次地删除“Hearts”和“Inventory”对象。您可以通过添加名为
isDead
的bool并将该语句更改为
if来解决此问题(HP如果我理解正确,您似乎在每一帧都销毁并重新设置健康栏。您将希望使其更受事件驱动(即在HP更改时仅更新一次健康栏)1.你不应该在
Update
中使用
Find
!2.你不应该多次使用
Find
…如果某个东西只使用一次,请存储结果并在以后重用引用!3.你不应该在
Update中一直销毁和重新实例化内容
这是非常高的性能要求,也是一种资源浪费。仅实例化一次内容。。。