Example #1
0
        private static void CopyRecursive(GameObject src, GameObject dst, ObjCopy.IsAssignable assignable, bool addIfMissing)
        {
            CopyComponentValues(src, dst, assignable, addIfMissing);
            Dictionary <string, Transform> dstMap = new Dictionary <string, Transform>();

            foreach (Transform d in dst.transform)
            {
                dstMap[d.name] = d;
            }
            foreach (Transform s in src.transform)
            {
                Transform d = null;
                if (dstMap.TryGetValue(s.name, out d))
                {
                    CopyRecursive(s.gameObject, d.gameObject, assignable, addIfMissing);
                }
                else
                {
                    Debug.LogWarning(string.Format("No GameObject '{0}'", s.name));
                }
            }
        }
Example #2
0
        private static void CopyComponentValues(GameObject src, GameObject dst, ObjCopy.IsAssignable assignable, bool addIfMissing)
        {
            if (src.name != dst.name)
            {
                Debug.LogWarning(string.Format("Name is different. {0} <-> {1}", src.name, dst.name));
            }
            ObjCopy copy = new ObjCopy(true, assignable);

            copy.ExcludeType("UnityEngine.Component", "UnityEngine.Object");
            copy.ExcludeField("UnityEngine.Transform", "hasChanged");
            foreach (Component s in src.GetComponents <Component>())
            {
                Component d = dst.GetComponent(s.GetType());
                if (addIfMissing && d == null)
                {
                    d = dst.AddComponent(s.GetType());
                }
                if (d != null)
                {
                    List <MemberInfo> changed = copy.SetValue(s, d);
                    EditorUtil.SetDirty(d);
                    StringBuilder str = new StringBuilder();
                    foreach (MemberInfo m in changed)
                    {
                        str.Append(dst.name).Append(".").Append(m.Name).Append("\n");
                    }
                    if (str.Length > 0)
                    {
                        Debug.LogWarning(str.ToString());
                    }
                }
                else
                {
                    Debug.LogWarning(string.Format("Source has {0} but Missing in Dest", s.GetType().FullName));
                }
            }
            EditorUtil.SetDirty(dst);
        }