1) создаю префаб - простой спрайт и на нем класс Test содержащий только переменную int q и ее интерфейс Q
Синтаксис:
Используется csharp
using UnityEngine;
public class Test : MonoBehaviour {
private int q;
public int Q
{
get
{
return q;
}
set
{
q = value;
}
}
}
public class Test : MonoBehaviour {
private int q;
public int Q
{
get
{
return q;
}
set
{
q = value;
}
}
}
2)
Создаю кнопку, вешаю на нее скрипт который по клику делает следующее:
Синтаксис:
Используется csharp
public void Test()
{
Transform testTransform = Resources.Load<Transform>("Test");//нахожу свой префаб
if (GameObject.Find("QQ") != null)
{
Destroy(GameObject.Find("QQ"));//если объект уже был создан ранее - удаляю
}
Transform thisTest = Instantiate(testTransform);//вызываю заново объект
Test test = thisTest.GetComponent<Test>();//получаю ссылку на скрипт с переменной
thisTest.name = "QQ";//даю объекту имя что бы его можно было найти
GameObject.Find("QQ").GetComponent<Test>().Q = 1;//ищу свой объект и задаю переменную
Debug.Log(GameObject.Find("QQ").GetComponent<Test>().Q +=10);//добавляю к переменной 10 и вывожу
}
{
Transform testTransform = Resources.Load<Transform>("Test");//нахожу свой префаб
if (GameObject.Find("QQ") != null)
{
Destroy(GameObject.Find("QQ"));//если объект уже был создан ранее - удаляю
}
Transform thisTest = Instantiate(testTransform);//вызываю заново объект
Test test = thisTest.GetComponent<Test>();//получаю ссылку на скрипт с переменной
thisTest.name = "QQ";//даю объекту имя что бы его можно было найти
GameObject.Find("QQ").GetComponent<Test>().Q = 1;//ищу свой объект и задаю переменную
Debug.Log(GameObject.Find("QQ").GetComponent<Test>().Q +=10);//добавляю к переменной 10 и вывожу
}
В чем проблема:
1) после 1 го клика по кнопке: смотрю в инспекторе в режиме debug q = 1, Debug.Log выводит 11 - все в порядке
2) после 2го клика по той же кнопке: смотрю в инспекторе в режиме debug q = 0 (а должно быть снова q = 1), Debug.Log выводит снова 11
3) все последующие клики аналогично 2му
Вопрос:
- почему во 2й раз и далее q != 1 !?
- почему при этом Debug.Log выводит 11 !?
Такое ощущение, что GameObject.Find("QQ").GetComponent<Test>().Q как-то закешировался и ищет не тот объект который в сцене сейчас, а первый объект с таким-же именем удаленный между 1м и 2м кликом, и в нем записано что q=1. Может ли такое быть, или ошибка в другом?