这只适用于cs内Gameobject的命名与Hierarchy一致的情况
[MenuItem("Tools/AddGameObject")]
public static void AddGameObject()
{
Object[] objects = Resources.FindObjectsOfTypeAll<GameObject>();
for (int i = 0; i < objects.Length; i++)
{
GameObject go = objects[i] as GameObject;
if (go == null)
continue;
if (go.hideFlags == HideFlags.NotEditable ||
go.hideFlags == HideFlags.HideAndDontSave ||
go.hideFlags > HideFlags.HideAndDontSave)
continue;
MonoBehaviour[] monos = go.GetComponents<MonoBehaviour>();
for (int j = 0; j < monos.Length; j++)
{
var fields = monos[j].GetType().GetFields();
for (int k = 0; k < fields.Length; k++)
{
go = GameObject.Find(fields[k].Name);
if (go == null)
continue;
fields[k].SetValue(monos[j], go);
}
}
}
EditorSceneManager.SaveOpenScenes();
}