public static void Painter_PrefabSave(GameObject land) { if (land == null) { return; } PrefabPainterSettings settings = PrefabPainterSettings.current; if (settings != null) { PrefabInstanceInfo info = new PrefabInstanceInfo(); info.offset = settings.tile_offset; info.row_count = settings.tile_row; info.column_count = settings.tile_column; info.row_width = settings.tile_width; info.column_length = settings.tile_length; for (int i = 0; i < land.transform.childCount; i++) { Transform child = land.transform.GetChild(i); info.AddGroup(child); } Hashtable table = info.ToHashTable(); string str = SimpleJsonUtil.jsonEncode(table); string path = EditorUtility.SaveFilePanel("植被数据保存", Application.dataPath, "land", "json"); if (!string.IsNullOrEmpty(path)) { System.IO.File.WriteAllText(path, str); EditorUtility.DisplayDialog("提示", "保存成功", "确定"); } } }
public T String2Object <T>(string content) { T t = default(T); bool state = JsonUtils.TryFromJson(out t, content); if (!state) { t = SimpleJsonUtil.FromJson <T>(content); } else { if (JsonUtils.ToJson(t) == "{}") { t = SimpleJsonUtil.FromJson <T>(content); } } //Debug.Log(state+ " old:" + content + "\n" + "new:" + JsonUtils.ToJson(t)+"\n def:"+JsonUtils.ToJson(default(T))); return(t); }
private static void ReadTest(SimpleJsonUtil _) { SimpleJson json = _.From(@" { ""key1"":1, key2:false, key3:true, key4:[0.123,123,.123,], key5:'""""\u6D4B\u8BD5\r\n123', 'key6':[,,,], key7:{a:[0,1,2,3],b:'foo bar'} } "); assert(json.Type == SimpleJsonType.Object); assert(json["key1"].Get<int>() == 1); assert(json["key2"].Get<bool>() == false); assert(json["key3"].Get<bool>() == true); SimpleJson list = json["key4"]; assert(list.Type == SimpleJsonType.Array); assert(list[0].Get<float>() == 0.123f); assert(list[1].Get<int>() == 123); assert(list[2].Get<float>() == .123f); assert(list[3].IsUndefined); assert(list[4].IsUndefined); string str = json["key5"].Get<string>(); assert(str == @"""""测试 123"); list = json["key6"]; assert(list.Count == 3); // js中[,,,]会返回长度为3的数组 assert(list[0].IsUndefined); assert(list[1].IsUndefined); assert(list[2].IsUndefined); assert(json.Get<int>("key4[1]") == 123); assert(json.Get<int>("key7.a.0") == 0); assert(json.Get<int>("key7.a.0") == json.Get<int>("key7.a[0]")); Console.WriteLine(string.Join(" , ", json.Keys)); }
private static void WriteTest(SimpleJsonUtil _) { assert(_.To(_.String(@" ' "" \ , : ")) == @""" ' \"" \\ , : """); assert(_.To(_.Array(1, 2, _.Undefined(), 3, _.Undefined())) == "[1,2,null,3]"); assert(_.To(_.Boolean(false)) == "false"); assert(_.To(_.Boolean(true)) == "true"); assert(_.To(_.Null()) == "null"); assert(_.To(_.Number(100)) == "100"); assert(_.To(_.Number(0.123f)) == "0.123"); assert(_.To(_.Object( "foo", "bar", "hello", 111, "world", _.Undefined() )) == @"{""foo"":""bar"",""hello"":111,""world"":null}"); assert(_.To(_.Undefined()) == ""); SimpleJson v = _.Value(DateTime.Now); assert(v.Type == SimpleJsonType.Unknown); assert(_.To(v) == ""); string jsonstr = _.To(_.Array( 1, 2.3f, 4.5d, 6L, 'c', "string", _.Object( "key1", true, "key2", false, "key3", null, "key4", _.Array(true, false, _.Undefined()) ), _.Undefined() )); Console.WriteLine(jsonstr); string jsstrdefine = SimpleJsonUtil.JsStringDefine(jsonstr, true); Console.WriteLine(jsstrdefine); }
/// <summary></summary> /// <param name="args"></param> public static void Main(string[] args) { SimpleJsonUtil _ = new SimpleJsonUtil(); ReadTest(_); WriteTest(_); }
public static GameObject LoadPrefabInfo(out PrefabInstanceInfo pi_info) { GameObject result = null; pi_info = null; string path = EditorUtility.OpenFilePanel("植被数据读取", Application.dataPath, "json"); if (string.IsNullOrEmpty(path)) { return(null); } string content = System.IO.File.ReadAllText(path); if (content != null) { Hashtable info = (Hashtable)SimpleJsonUtil.jsonDecode(content); pi_info = new PrefabInstanceInfo(); pi_info.LoadHashTable(info); GameObject land = new GameObject("land"); result = land; Transform land_tran = land.transform; land_tran.position = Vector3.zero; for (int i = 0; i < pi_info.objs.Count; i++) { PrefabObjInfo po_info = pi_info.objs[i]; GameObject group = new GameObject(po_info.group_name); Transform group_tran = group.transform; group_tran.parent = land_tran; group_tran.position = Vector3.zero; group_tran.rotation = Quaternion.identity; group_tran.localScale = Vector3.one; GameObject src_obj = AssetDatabase.LoadAssetAtPath <GameObject>(po_info.prefab_path); Dictionary <int, List <int[]> > .Enumerator iter = po_info.objs_dic.GetEnumerator(); while (iter.MoveNext()) { List <int[]> value = iter.Current.Value; for (int j = 0; j < value.Count; j++) { int[] tran_arr = value[j]; GameObject dst = (GameObject)PrefabUtility.InstantiatePrefab(src_obj); dst.name = src_obj.name; dst.transform.parent = group_tran; Vector3 position = new Vector3( IntToFloat(tran_arr[0]), IntToFloat(tran_arr[1]), IntToFloat(tran_arr[2])); Quaternion rotation = Quaternion.Euler( IntToFloat(tran_arr[3]), IntToFloat(tran_arr[4]), IntToFloat(tran_arr[5])); Vector3 scale = new Vector3( IntToFloat(tran_arr[6]), IntToFloat(tran_arr[7]), IntToFloat(tran_arr[8])); dst.transform.position = position; dst.transform.rotation = rotation; dst.transform.localScale = scale; } } } EditorUtility.DisplayDialog("提示", "读取成功,已经初始化到场景内!", "确定"); } return(result); }