示例#1
0
        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 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);
        }