コード例 #1
0
ファイル: PrefabSaver.cs プロジェクト: Hengle/GpuInstanceTest
        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("提示", "保存成功", "确定");
                }
            }
        }
コード例 #2
0
    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);
    }
コード例 #3
0
        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));
        }
コード例 #4
0
        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);
        }
コード例 #5
0
 /// <summary></summary>
 /// <param name="args"></param>
 public static void Main(string[] args)
 {
     SimpleJsonUtil _ = new SimpleJsonUtil();
     ReadTest(_);
     WriteTest(_);
 }
コード例 #6
0
ファイル: PrefabSaver.cs プロジェクト: Hengle/GpuInstanceTest
        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);
        }