unity3d 场景配置文件生成代码

using UnityEngine;

using UnityEditor;

using System.IO;

using System;

using System.Text;

using System.Collections.Generic;

using LitJson;

public class BuildAssetBundlesFromDirectory

{

      static List<JsonResource> config=new List<JsonResource>();

      static Dictionary<string, List<JsonResource>> assetList=new Dictionary<string, List<JsonResource>>();

        [@MenuItem("Asset/Build AssetBundles From Directory of Files")]//这里不知道为什么用"@",添加菜单

        static void ExportAssetBundles ()

        {//该函数表示通过上面的点击响应的函数

                   assetList.Clear();

                   string path = AssetDatabase.GetAssetPath(Selection.activeObject);//Selection表示你鼠标选择激活的对象

                  Debug.Log("Selected Folder: " + path);

       

       

                  if (path.Length != 0)

                  {

                           path = path.Replace("Assets/", "");//因为AssetDatabase.GetAssetPath得到的是型如Assets/文件夹名称,且看下面一句,所以才有这一句。

                            Debug.Log("Selected Folder: " + path);

                           string [] fileEntries = Directory.GetFiles(Application.dataPath+"/"+path);//因为Application.dataPath得到的是型如 "工程名称/Assets"

                           

                           string[] div_line = new string[] { "Assets/" };

                           foreach(string fileName in fileEntries)

                           {

                                    j++;

                                    Debug.Log("fileName="+fileName);

                                    string[] sTemp = fileName.Split(div_line, StringSplitOptions.RemoveEmptyEntries);

                                    string filePath = sTemp[1];

                                     Debug.Log(filePath);

                                    filePath = "Assets/" + filePath;

                                    Debug.Log(filePath);

                                    string localPath = filePath;

                                    UnityEngine.Object t = AssetDatabase.LoadMainAssetAtPath(localPath);

                                   

                                     //Debug.Log(t.name);

                                    if (t != null)

                                    {

                                            Debug.Log(t.name);

                                            JsonResource jr=new JsonResource();

                                            jr.Name=t.name;

                                            jr.Source=path+"/"+t.name+".unity3d";

                                              Debug.Log( t.name);

                                            config.Add(jr);//实例化json对象

                                              string bundlePath = Application.dataPath+"/../"+path;

                                               if(!File.Exists(bundlePath))

                                                {

                                                   Directory.CreateDirectory(bundlePath);//在Asset同级目录下相应文件夹

                                                }

                                              bundlePath+="/"  + t.name + ".unity3d";

                                             Debug.Log("Building bundle at: " + bundlePath);

                                             BuildPipeline.BuildAssetBundle(t, null, bundlePath, BuildAssetBundleOptions.CompleteAssets);//在对应的文件夹下生成.unity3d文件

                                    } 

                           }

                            assetList.Add("AssetList",config);

                            for(int i=0;i<config.Count;i++)

                            {

                                    Debug.Log(config[i].Source);

                            }

                  }

                string data=JsonMapper.ToJson(assetList);//序列化数据

                Debug.Log(data);

        string jsonInfoFold=Application.dataPath+"/../Scenes";

        if(!Directory.Exists(jsonInfoFold))

        {

            Directory.CreateDirectory(jsonInfoFold);//创建Scenes文件夹

        }

                string fileName1=jsonInfoFold+"/json.txt";

                if(File.Exists(fileName1))

                {

                    Debug.Log(fileName1 +"already exists");

                    return;

                }

                UnicodeEncoding uni=new UnicodeEncoding();

                  

                using(  FileStream  fs=File.Create(fileName1))//向创建的文件写入数据

                {

                        fs.Write(uni.GetBytes(data),0,uni.GetByteCount(data));

                        fs.Close();

                }

      }

}

 http://www.cnblogs.com/U-tansuo/archive/2012/07/11/2587173.html

你可能感兴趣的:(unity3d)