public static void CopyGameObjectMonoBehaviours() { Debug.Log("CopyGameObjectMonoBehaviours"); foreach (var go in Selection.gameObjects) { JSSerializerEditor.CopyGameObject(go); } }
/// <summary> /// Do some actions to GameObject hierachy. /// </summary> /// <param name="sbLog">The log.</param> /// <param name="go">The gameobject.</param> /// <param name="tab">The tab.</param> /// <param name="op">The operation.</param> public static void TraverseGameObject(StringBuilder sbLog, GameObject go, int tab, TraverseOp op) { for (var t = 0; t < tab; t++) { sbLog.Append(" "); } sbLog.AppendFormat("{0}", go.name); bool hasChecked = false; bool hasReplaced = false; bool hasError = false; // disconnect prefab instance !! if ((op == TraverseOp.CopyMonoBehaviour || op == TraverseOp.RemoveOldBehaviour) && PrefabUtility.GetPrefabType(go) == PrefabType.PrefabInstance) { PrefabUtility.DisconnectPrefabInstance(go); } // action! switch (op) { case TraverseOp.CopyMonoBehaviour: { bool bReplaced = JSSerializerEditor.CopyGameObject(go); if (bReplaced && !hasReplaced) { hasReplaced = true; sbLog.Append(" (REPLACED)"); } } break; case TraverseOp.RemoveOldBehaviour: { JSSerializerEditor.RemoveOtherMonoBehaviours(go); } break; case TraverseOp.Analyze: { var coms = go.GetComponents(typeof(MonoBehaviour)); // Calculate MonoBehaviour's Count // Only check scripts that has JsType attribute Dictionary <Type, int> dictMono = new Dictionary <Type, int>(); for (var c = 0; c < coms.Length; c++) { MonoBehaviour mb = (MonoBehaviour)coms[c]; if (mb == null) { CheckHasError = true; Debug.LogError("Null MonoBehaviour found, gameObject name: " + go.name); continue; } if (JSSerializerEditor.WillTypeBeTranslatedToJavaScript(mb.GetType())) { if (!dictMono.ContainsKey(mb.GetType())) { dictMono.Add(mb.GetType(), 1); } else { dictMono[mb.GetType()]++; } } } foreach (var t in dictMono) { if (!hasChecked) { hasChecked = true; sbLog.Append(" (CHECKED)"); } if (t.Value > 1) { if (!hasError) { hasError = true; sbLog.Append(" ERROR: "); } CheckHasError = true; sbLog.AppendFormat("Same MonoBehaviour more than once. Name: {0}, Count: {1} ", t.Key.Name, t.Value); } } for (var c = 0; c < coms.Length; c++) { MonoBehaviour mb = (MonoBehaviour)coms[c]; if (mb == null) { continue; } if (JSSerializerEditor.WillTypeBeTranslatedToJavaScript(mb.GetType())) { List <string> lstError = ExamMonoBehaviour(mb); if (lstError.Count > 0) { CheckHasError = true; } for (var x = 0; x < lstError.Count; x++) { if (!hasError) { hasError = true; sbLog.Append(" ERROR: "); } sbLog.Append(lstError[x] + " "); } } } } break; default: break; } sbLog.Append("\n"); // traverse children var childCount = go.transform.childCount; for (var i = 0; i < childCount; i++) { Transform child = go.transform.GetChild(i); TraverseGameObject(sbLog, child.gameObject, tab + 1, op); } }