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 GameObjectstInfo[] objectsinfo;
private bool searching = false;
// Start is called before the first frame update
void Start()
{
Search();
}
private void Update()
{
}
public void Search()
{
if (gameObjectsInfo != "")
{
var foundObjects = FindGameObjectsWithName(gameObjectsInfo);
objectsinfo = new GameObjectstInfo[foundObjects.Length];
for (int i = 0; i < foundObjects.Length; i++)
{
objectsinfo[i] = new GameObjectstInfo();
objectsinfo[i].parent = foundObjects[i];
foreach (Transform child in foundObjects[i].transform)
{
objectsinfo[i].childrenCount += 1;
objectsinfo[i].children.Add(child);
}
}
}
}
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;
}
}
Я хочу сделать это только в том случае, если строка var gameObjectsInfo не является пустой, вызовите Search();
один раз, чтобы выполнить поиск один раз, и если пользователь изменяет строку внутри var gameObjectsInfo, каждый раз производите новый поиск. Но каждый раз один поиск и новый поиск, если строка изменилась.
Основная цель - иметь возможность поиска в режиме реального времени внутри Обновления или с помощью кнопки. Часть кнопки работает нормально, но я хочу иметь возможность поиска также в режиме реального времени внутри обновления.
Сценарий кнопки:
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(GameObjectInfo))]
public class GameObjectInfoButton : Editor
{
public override void OnInspectorGUI()
{
DrawDefaultInspector();
GameObjectInfo myScript = (GameObjectInfo)target;
if (GUILayout.Button("Search"))
{
myScript.Search();
}
}
}