예제 #1
0
        internal void Load(List <System.Object> l, bool prefab)
        {
            bool need_prefab = prefab;

            prefab = true;
            Dictionary <string, object> fid2json = new Dictionary <string, object>();

            foreach (Dictionary <string, System.Object> d in l)
            {
                var type   = d["_type"].ToString();
                var fileID = d["fileID"].ToString();
                if (type == "GameObject")
                {
                    var        o  = UnityEngine.Config.GameObject.FromJson(d);
                    GameObject go = new GameObject(o.m_Name, prefab);
                    go.SetSelfActive(o.m_IsActive == 1);
                    go.m_IsStaticInScene = (o.m_StaticEditorFlags == 4294967295);
                    go.layer             = o.m_Layer;
                    go.hideFlags         = (HideFlags)o.m_ObjectHideFlags;
                    tl[fileID]           = go;
                    fid2Object[fileID]   = go;
                }
                else if (type == "Transform")
                {
                    var o         = UnityEngine.Config.Transform.FromJson(d);
                    var transform = tl[o.m_GameObject.fileID].AddComponent <Transform>();
                    transform_helper[transform] = o.m_Father.fileID;
                    transform_helper2[o.fileID] = transform;
                    if (transform.gameObject.GetComponent <SkinnedMeshRenderer>() != null)
                    {
                        transform.__Reset();
                    }
                    else
                    {
                        transform.localPosition = new Vector3(o.m_LocalPosition.x, o.m_LocalPosition.y, o.m_LocalPosition.z);
                        transform.localRotation = new Quaternion(o.m_LocalRotation.x, o.m_LocalRotation.y, o.m_LocalRotation.z, o.m_LocalRotation.w);
                        transform.localScale    = new Vector3(o.m_LocalScale.x, o.m_LocalScale.y, o.m_LocalScale.z);
                    }
                    fid2Object[fileID] = transform;
                }
                else if (type == "MonoBehaviour")
                {
                    var o       = UnityEngine.Config.MonoBehaviour.FromJson(d);
                    var filemap = rmm.GetFromInfo(o.m_Script);
                    if (filemap == null)
                    {
                        Debug.LogError("Missing behaviour in map. guid = " + o.guid);
                        continue;
                    }
                    var comp = tl[o.m_GameObject.fileID].AddComponent(TypeUtil.GetTypeFromString(filemap.name), d);
                    if (comp == null)
                    {
                        Debug.LogError("Missing behaviour in type. guid = " + o.guid);
                        continue;
                    }
                    MonoBehaviour mb = comp as MonoBehaviour;
                    mb.SetEnabled(o.m_Enabled == 1);
                    fid2Object[fileID] = mb;
                    fid2json[fileID]   = d;
                }
                else if (type == "Camera")
                {
                    var o      = UnityEngine.Config.Camera.FromJson(d);
                    var camera = tl[o.m_GameObject.fileID].AddComponent <Camera>();
                    camera.fieldOfView      = o.field_of_view;
                    camera.nearClipPlane    = o.near_clip_plane;
                    camera.farClipPlane     = o.far_clip_plane;
                    camera.orthographicSize = o.orthographic_size;
                    camera.orthographic     = o.orthographic == 1;
                    camera.SetEnabled(o.m_Enabled == 1);
                    camera.cullingMask     = (int)o.m_CullingMask.m_Bits;
                    camera.depth           = o.m_Depth;
                    camera.clearFlags      = (CameraClearFlags)o.m_ClearFlags;
                    camera.backgroundColor = new Color(o.m_BackGroundColor.r, o.m_BackGroundColor.g,
                                                       o.m_BackGroundColor.b, o.m_BackGroundColor.a);
                    fid2Object[fileID] = camera;
                }
                else if (type == "MeshFilter")
                {
                    var o          = UnityEngine.Config.MeshFilter.FromJson(d);
                    var meshFilter = tl[o.m_GameObject.fileID].AddComponent <MeshFilter>();
                    meshFilter.SetMesh(o.m_Mesh);
                    fid2Object[fileID] = meshFilter;
                }
                else if (type == "Renderer")
                {
                    var o        = UnityEngine.Config.Renderer.FromJson(d);
                    var renderer = tl[o.m_GameObject.fileID].AddComponent(typeof(MeshRenderer), o);
                    fid2Object[fileID] = renderer;
                }
                else if (type == "SkinnedMeshRenderer")
                {
                    var o = UnityEngine.Config.SkinnedMeshRenderer.FromJson(d);
                    var skinnedMeshRenderer = tl[o.m_GameObject.fileID].AddComponent(typeof(SkinnedMeshRenderer), o);
                    fid2Object[fileID] = skinnedMeshRenderer;
                }
                else if (type == "Animation")
                {
                    var o    = UnityEngine.Config.Animation.FromJson(d);
                    var anim = tl[o.m_GameObject.fileID].AddComponent(typeof(Animation), o);
                    fid2Object[fileID] = anim;
                }
                else if (type == "Light")
                {
                    var o     = UnityEngine.Config.Light.FromJson(d);
                    var light = tl[o.m_GameObject.fileID].AddComponent(typeof(Light), o);
                    fid2Object[fileID] = light;
                }
                else if (type == "BoxCollider")
                {
                    var o           = UnityEngine.Config.BoxCollider.FromJson(d);
                    var boxCollider = tl[o.m_GameObject.fileID].AddComponent(typeof(BoxCollider), o);
                    fid2Object[fileID] = boxCollider;
                }
                else if (type == "AudioSource")
                {
                    var o           = UnityEngine.Config.AudioSource.FromJson(d);
                    var boxCollider = tl[o.m_GameObject.fileID].AddComponent(typeof(AudioSource), o);
                    fid2Object[fileID] = boxCollider;
                }
            }
            foreach (var kvp in tl)
            {
                var    transform = kvp.Value.transform;
                string father    = transform_helper[transform];
                if (father == "0")
                {
                    // root.
                    all.Add(kvp.Value);
                }
                else
                {
                    var fatherTr = transform_helper2[father];
                    transform.SetParent(fatherTr, false);
                }
            }
            foreach (var item in fid2json)
            {
                MonoBehaviour mb = fid2Object[item.Key] as MonoBehaviour;
                initMonoBehaviour(mb, item.Value);
            }
            foreach (var kvp in tl)
            {
                if (!need_prefab)
                {
                    kvp.Value.ClearPrefabFlag();
                }
                kvp.Value.SetSelfActive(kvp.Value.m_IsActive);
            }
        }
예제 #2
0
 internal Component AddComponent(string className)
 {
     return(AddComponent(TypeUtil.GetTypeFromString(className)));
 }