using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[ExecuteInEditMode]
public class GameObjectInfo : MonoBehaviour
{
[System.Serializable]
public class GameObjectstInfo
{
public GameObject parent;
public int childrenCount;
public List<Transform> children = new List<Transform>();
}
public string gameObjectsInfo = "";
public string results = "";
public bool addChildren = false;
public GameObjectstInfo[] objectsInfo;
private string previousGameObjectsInfo = "";
// Start is called before the first frame update
void Start()
{
Search();
}
private void Update()
{
if (gameObjectsInfo != "" && gameObjectsInfo != previousGameObjectsInfo)
{
Search();
}
previousGameObjectsInfo = gameObjectsInfo;
Reset();
}
public void Search()
{
if (gameObjectsInfo != "")
{
var foundObjects = FindGameObjectsWithName(gameObjectsInfo);
objectsInfo = new GameObjectstInfo[foundObjects.Length];
if (foundObjects.Length > 0)
{
results = "Found Results";
for (int i = 0; i < foundObjects.Length; i++)
{
objectsInfo[i] = new GameObjectstInfo();
objectsInfo[i].parent = foundObjects[i];
if (addChildren == true)
{
foreach (Transform t in foundObjects[i].GetComponentsInChildren<Transform>(true))
{
objectsInfo[i].childrenCount += 1;
objectsInfo[i].children.Add(t);
}
}
else
{
}
}
}
else
{
results = "No Results";
}
}
}
private void Reset()
{
if (gameObjectsInfo == "")
{
results = "No Results";
objectsInfo = new GameObjectstInfo[0];
}
}
GameObject[] FindGameObjectsWithName(string nameIt)
{
int it = 0;
GameObject[] objArr;
bool b = false;
while (!b)
{
if (GameObject.Find(nameIt))
{
GameObject.Find(nameIt).name = nameIt + it;
it++;
}
else
{
b = true;
}
}
objArr = new GameObject[it];
while (it > 0)
{
it--;
objArr[it] = GameObject.Find(nameIt + it);
objArr[it].name = nameIt;
}
return objArr;
}
}
Это та часть, где я добавляю или не добавляю детей:
if (addChildren == true)
{
foreach (Transform t in foundObjects[i].GetComponentsInChildren<Transform>(true))
{
objectsInfo[i].childrenCount += 1;
objectsInfo[i].children.Add(t);
}
}
else
{
}
Но я хочу сделать это и в Обновлении, если флаг addChildren имеет значение true и для него установлено значение false или от false до true, чтобы внести изменения и добавить / удалить дочерние элементы в режиме реального времени.
Теперь мне нужно удалить текст в переменной gameObjectsInfo и снова ввести текст, чтобы внести изменения в дочерние элементы. Но я хочу, чтобы эффект происходил без повторного ввода. Только при изменении состояния флага addChildren.
Если я изменяю состояние addChildren, повторный поиск с детьми или без них.