Уже неделю мучаюсь и не могу разобраться уже кучу мануалов выкурил и так не получается решить проблему.
Есть задача сделать экспорт Ассетов, на версии Юнити 5.Х всё работает, но решил перейти на Юнити 2017 и тут вывалилась проблема с Экспортом Ассетов.
Код который работает в версии 5.Х
Синтаксис:
Используется csharp
[MenuItem("Publish/Build Publish AssetBundles")]
static void ExportResourceAutoAll()
{
AssetDatabase.DeleteAsset("Assets/StreamingAssets");
Directory.CreateDirectory("Assets/StreamingAssets");
currentScene = false;
ExportXML();
List<FileInfo> lst = new List<FileInfo>();
getPrefabs(new DirectoryInfo(Application.dataPath), lst);
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.Name);//
string path = "Assets/StreamingAssets/" + fileNameWithoutExtension + ".unity3d";
string[] res = Regex.Split(NextFile.FullName, "Assets");
string path1 = "";
for(int i=1; i<res.Length; i++)
{
path1 += "Assets";
path1 += res[i];
}
Object t = AssetDatabase.LoadMainAssetAtPath(path1);
Debug.Log("path=" + path1);
Debug.Log("Object=" + t);
try
{
// Build the resource file from the active selection.
BuildPipeline.BuildAssetBundles(t, null, path);
// BuildPipeline.BuildAssetBundle(t, null, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
}catch(System.Exception ex)
{
Debug.LogError(ex.Message.ToString());
}
}
lst.Clear();
getScenes(new DirectoryInfo(Application.dataPath), lst);
List<string> skyboxres = new List<string>();
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.FullName);
if(fileNameWithoutExtension == "go" || fileNameWithoutExtension == "gameui")
continue;
string[] res = Regex.Split(NextFile.FullName, "Assets");
string name = "Assets" + res[1];
EditorApplication.OpenScene(name);
if(RenderSettings.skybox != null)
{
bool created = false;
foreach(string mname in skyboxres)
{
if(RenderSettings.skybox.name == mname)
{
created = true;
break;
}
}
if(created == false)
{
skyboxres.Add(RenderSettings.skybox.name);
string path = "Assets/StreamingAssets/" + RenderSettings.skybox.name.Replace(" ", "_") + ".unity3d";
BuildPipeline.BuildAssetBundle(RenderSettings.skybox, null, path);
}
}
}
lst.Clear();
getUnity3ds(new DirectoryInfo(Application.dataPath), lst);
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.FullName);
System.IO.File.Copy(NextFile.FullName, "Assets/StreamingAssets/" + fileNameWithoutExtension + ".unity3d");
}
Debug.Log("Everything built successfully!");
EditorUtility.DisplayDialog("Everything built successfully!", "Everything built successfully!", " OK");
}
static void ExportResourceAutoAll()
{
AssetDatabase.DeleteAsset("Assets/StreamingAssets");
Directory.CreateDirectory("Assets/StreamingAssets");
currentScene = false;
ExportXML();
List<FileInfo> lst = new List<FileInfo>();
getPrefabs(new DirectoryInfo(Application.dataPath), lst);
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.Name);//
string path = "Assets/StreamingAssets/" + fileNameWithoutExtension + ".unity3d";
string[] res = Regex.Split(NextFile.FullName, "Assets");
string path1 = "";
for(int i=1; i<res.Length; i++)
{
path1 += "Assets";
path1 += res[i];
}
Object t = AssetDatabase.LoadMainAssetAtPath(path1);
Debug.Log("path=" + path1);
Debug.Log("Object=" + t);
try
{
// Build the resource file from the active selection.
BuildPipeline.BuildAssetBundles(t, null, path);
// BuildPipeline.BuildAssetBundle(t, null, path, BuildAssetBundleOptions.CollectDependencies | BuildAssetBundleOptions.CompleteAssets);
}catch(System.Exception ex)
{
Debug.LogError(ex.Message.ToString());
}
}
lst.Clear();
getScenes(new DirectoryInfo(Application.dataPath), lst);
List<string> skyboxres = new List<string>();
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.FullName);
if(fileNameWithoutExtension == "go" || fileNameWithoutExtension == "gameui")
continue;
string[] res = Regex.Split(NextFile.FullName, "Assets");
string name = "Assets" + res[1];
EditorApplication.OpenScene(name);
if(RenderSettings.skybox != null)
{
bool created = false;
foreach(string mname in skyboxres)
{
if(RenderSettings.skybox.name == mname)
{
created = true;
break;
}
}
if(created == false)
{
skyboxres.Add(RenderSettings.skybox.name);
string path = "Assets/StreamingAssets/" + RenderSettings.skybox.name.Replace(" ", "_") + ".unity3d";
BuildPipeline.BuildAssetBundle(RenderSettings.skybox, null, path);
}
}
}
lst.Clear();
getUnity3ds(new DirectoryInfo(Application.dataPath), lst);
foreach(FileInfo NextFile in lst)
{
string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(NextFile.FullName);
System.IO.File.Copy(NextFile.FullName, "Assets/StreamingAssets/" + fileNameWithoutExtension + ".unity3d");
}
Debug.Log("Everything built successfully!");
EditorUtility.DisplayDialog("Everything built successfully!", "Everything built successfully!", " OK");
}
В Юнити 2017 ошибки вываливаются тут:
Синтаксис:
Используется csharp
BuildPipeline.BuildAssetBundles(t, null, path);
тут
Синтаксис:
Используется csharp
BuildPipeline.BuildAssetBundle(RenderSettings.skybox, null, path);
Тут проблема в том что в 2017 изменили немного свойства BuildPipeline.BuildAssetBundle
Теперь должно быть BuildPipeline.BuildAssetBundles
Ребята направьте на путь истенный...