示例#1
0
 public static void CopyGameObjectMonoBehaviours()
 {
     Debug.Log("CopyGameObjectMonoBehaviours");
     foreach (var go in Selection.gameObjects)
     {
         JSSerializerEditor.CopyGameObject(go);
     }
 }
示例#2
0
    /// <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);
        }
    }