public Component ReadFromJson(IResMgr resmgr, GameObject node, MyJson.JsonNode_Object json, DelayProcess dp)
        {
            SkinnedMeshRenderer c = node.GetComponent(comptype) as SkinnedMeshRenderer;
            if (c == null)//这就可能了
                c = node.AddComponent<SkinnedMeshRenderer>();

            //mats
            var mats = json["mats"].AsList();
            Material[] rmats = new Material[mats.Count];
            for (int i = 0; i < mats.Count; i++)
            {
                string hashname = mats[i].AsString();
                rmats[i] = resmgr.GetMat(hashname);
            }
            c.materials = rmats;
            //bound
            var center = StringHelper.ToVector3(json["center"].AsString());
            var size = StringHelper.ToVector3(json["size"].AsString());

            c.localBounds = new Bounds(center, size);

            //mesh
            var mesh = resmgr.GetMesh(json["mesh"].AsString());
            c.sharedMesh = mesh;

            //延迟恢复
            if (json.ContainsKey("rootboneobj"))
            {
                dp.delayCall += () =>
                {
                    c.rootBone = dp.mapObjs[json["rootboneobj"].AsInt()].transform;
                };
            }
            if (json.ContainsKey("boneobjs"))
            {
                dp.delayCall += () =>
                  {
                      var array = json["boneobjs"] as MyJson.JsonNode_Array;
                      List<Transform> bones = new List<Transform>();
                      foreach (var b in array)
                      {
                          bones.Add(dp.mapObjs[b.AsInt()].transform);
                      }
                      c.bones = bones.ToArray();
                  };
            }
            return c;
        }
Example #2
0
        void Json2Obj(MyJson.JsonNode_Object _json, GameObject _obj, DelayProcess dp)
        {
            _obj.name = _json["name"].AsString();
            var comps = _json["components"].AsList();
            if (_json.ContainsKey("id"))
            {
                var id = _json["id"].AsInt();
                dp.mapObjs[id] = _obj;
            }
            //遍历填充组件
            foreach (MyJson.JsonNode_Object c in comps)
            {

                string type = c["type"].AsString();
                this.componentParsers[type].ReadFromJson(resmgr, _obj, c, dp);
            }

            //遍历填充树
            if (_json.ContainsKey("children"))
            {
                var children = _json["children"].AsList();
                foreach (MyJson.JsonNode_Object subjson in children)
                {
                    GameObject subobj = new GameObject();
                    subobj.transform.SetParent(_obj.transform);
                    Json2Obj(subjson, subobj, dp);
                }
            }

        }
Example #3
0
        public static object FromJson(string ScriptTypeName, MyJson.JsonNode_Object data)
        {
            var type = env.GetTypeByKeywordQuiet(ScriptTypeName);
            CSLE.SType stype = type.function as CSLE.SType;
            CSLE.SInstance s = new CSLE.SInstance();
            s.type = stype;

            foreach (var m in stype.members)
            {
                if (m.Value.bStatic) continue;

                s.member[m.Key] = new CSLE.CLS_Content.Value();
                s.member[m.Key].type = m.Value.type.type;
                s.member[m.Key].value = m.Value.type.DefValue;//先填默认值

                if (data.ContainsKey(m.Key) == false)//json中没有的部分填默认值
                    continue;
                if (data[m.Key].IsNull())//json中没有的部分填默认值
                    continue;

                {

                    if ((Type)m.Value.type.type == typeof(int))
                    {
                        s.member[m.Key].value = data[m.Key].AsInt();
                    }
                    else if ((Type)m.Value.type.type == typeof(float))
                    {
                        s.member[m.Key].value = (float)data[m.Key].AsDouble();
                    }
                    else if ((Type)m.Value.type.type == typeof(double))
                    {
                        s.member[m.Key].value = data[m.Key].AsDouble();
                    }
                    else if ((Type)m.Value.type.type == typeof(string))
                    {
                        s.member[m.Key].value = data[m.Key].AsString();
                    }
                    else if ((Type)m.Value.type.type == typeof(List<object>))
                    {
                        //处理List
                        List<object> list = new List<object>();
                        s.member[m.Key].value = list;
                        int i = m.Value.type.keyword.IndexOf('<');

                        string subtype = m.Value.type.keyword.Substring(i + 1);
                        subtype = subtype.Remove(subtype.Length - 1);
                        foreach (MyJson.JsonNode_Object item in data[m.Key].AsList())
                        {
                            list.Add(FromJson(subtype, item));
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<string>))
                    {
                        List<string> list = new List<string>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueString item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<int>))
                    {
                        List<int> list = new List<int>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<float>))
                    {
                        List<float> list = new List<float>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)m.Value.type.type == typeof(List<double>))
                    {
                        List<double> list = new List<double>();
                        s.member[m.Key].value = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m.Key].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((CSLE.SType)m.Value.type.type != null)//其他嵌套脚本类型
                    {
                        CSLE.SType subtype = (CSLE.SType)m.Value.type.type;
                        s.member[m.Key].value = FromJson(m.Value.type.keyword, data[m.Key] as MyJson.JsonNode_Object);
                    }
                    else
                    {
                        Debug.Log("发现不能处理的类型:" + ScriptTypeName + ":" + m.Key + ":" + m.Value.type.ToString());
                    }
                }

            }


            return s;
        }
Example #4
0
        public static object FromJson(object ScriptType, MyJson.JsonNode_Object data)
        {
            CLRSharp.ICLRType_Sharp type = ScriptType as CLRSharp.ICLRType_Sharp;
            CLRSharp.CLRSharp_Instance s = new CLRSharp.CLRSharp_Instance(type);
            type.GetMethod(".ctor", CLRSharp.MethodParamList.constEmpty()).Invoke(null, s, new object[] { });


            foreach (var m in type.GetFieldNames())
            {
                var field = type.GetField(m);
                if (field.isStatic) continue;
                //s.Fields[m] = field.DefValue;

                //        s.member[m.Key] = new CSLE.CLS_Content.Value();
                //        s.member[m.Key].type = m.Value.type.type;
                //        s.member[m.Key].value = m.Value.type.DefValue;//先填默认值

                if (data.ContainsKey(m) == false)//json中没有的部分填默认值
                    continue;
                if (data[m].IsNull())//json中没有的部分填默认值
                    continue;

                {

                    if ((Type)field.FieldType.TypeForSystem == typeof(int))
                    {
                        s.Fields[m] = data[m].AsInt();
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(float))
                    {
                        s.Fields[m] = (float)data[m].AsDouble();
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(double))
                    {
                        s.Fields[m] = data[m].AsDouble();
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(string))
                    {
                        s.Fields[m] = data[m].AsString();
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(List<CLRSharp.CLRSharp_Instance>))
                    {
                        //处理List
                        List<CLRSharp.CLRSharp_Instance> list = new List<CLRSharp.CLRSharp_Instance>();
                        s.Fields[m] = list;
                        var subtype = field.FieldType.SubTypes[0];
                        foreach (MyJson.JsonNode_Object item in data[m].AsList())
                        {
                            list.Add(FromJson(subtype, item) as CLRSharp.CLRSharp_Instance);
                        }
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(List<string>))
                    {
                        List<string> list = new List<string>();
                        s.Fields[m] = list;
                        foreach (MyJson.JsonNode_ValueString item in data[m].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(List<int>))
                    {
                        List<int> list = new List<int>();
                        s.Fields[m] = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(List<float>))
                    {
                        List<float> list = new List<float>();
                        s.Fields[m] = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if ((Type)field.FieldType.TypeForSystem == typeof(List<double>))
                    {
                        List<double> list = new List<double>();
                        s.Fields[m] = list;
                        foreach (MyJson.JsonNode_ValueNumber item in data[m].AsList())
                        {
                            list.Add(item);
                        }
                    }
                    else if (field.FieldType.TypeForSystem == typeof(CLRSharp.CLRSharp_Instance))//其他嵌套脚本类型
                    {
                        s.Fields[m] = FromJson(field.FieldType, data[m] as MyJson.JsonNode_Object);
                    }
                    else
                    {
                        Logger.Log("发现不能处理的类型:" + type + ":" + m + ":" + type.GetField(m).FieldType);
                    }
                }

            }


            return s;
        }