Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не работает код Unity C#

Позер Тильтов Знаток (376), на голосовании 4 месяца назад
 мне нужно после создания GameObject flower его удалить при повторном нажатии 
но он не находится, так как изменен в конструкции if, как мне это исправить?


using UnityEngine;

public class MouseClick : MonoBehaviour
{
public GameObject panel;
public GameObject objectt;
private bool a = true;
public GameObject flower;
private void OnMouseDown()
{
if (a == true)
{
GameObject flower = Instantiate(objectt, panel.transform.position, Quaternion.identity);
a = false;
Debug.Log(a);
Debug.Log(flower);
}
else
{
Destroy(flower)
}
}
}
Голосование за лучший ответ
Татьяна Просветленный (36374) 5 месяцев назад
Ваш код имеет проблему с областью видимости переменной flower. Внутри условия if (a == true) вы создаете новую локальную переменную flower, которая затеняет поле класса flower. В результате, когда вы пытаетесь удалить объект в блоке else, вы обращаетесь к полю класса, которое не инициализировано.

Вам нужно изменить код так, чтобы использовать поле класса flower для хранения ссылки на созданный объект.

 using UnityEngine; 

public class MouseClick : MonoBehaviour
{
public GameObject panel;
public GameObject objectt;
private bool a = true;
private GameObject flower; // Изменено: теперь это поле класса

private void OnMouseDown()
{
if (a)
{
flower = Instantiate(objectt, panel.transform.position, Quaternion.identity); // Изменено: используем поле класса
a = false;
Debug.Log(a);
Debug.Log(flower);
}
else
{
Destroy(flower);
a = true; // Изменено: восстанавливаем флаг
Debug.Log(a);
}
}
}
Позер ТильтовЗнаток (376) 5 месяцев назад
кажись это гпт, но если писала ты, спасибо, но в операторе ты забыла добавить условие true
Татьяна Просветленный (36374) Позер Тильтов, нет я все проверяю в vscode
Похожие вопросы