Я пытался создать программу, которая обновляла бы количество сердец у игрока за каждый ход (полное, наполовину и пустое сердце). Когда я делал это, я создал экземпляр игрового объекта этого префаба как переменную, а затем назначил его единой панели пользовательского интерфейса. Однако (я не уверен, но я думаю, что) переменные, используемые в обновлении непосредственно перед этим, все еще ссылаются после того, как были уничтожены в следующем цикле, выдавая мне ошибку:
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);
}
}
Есть ли способ создания префаба без создания переменной? Или способ сделать ссылку на переменную временной, чтобы она длилась только одно обновление?
Заранее спасибо за помощь!