我想问一下是否有人在Unity上使用Unity创建Assetbundle?我想在 Cloud 上动态生成AssetBundle,客户端应用程序会相应地下载它 .
你能告诉我你的想法吗?是否有用于托管Unity的 Cloud 服务?
AssetBundles需要unity pro才能构建 . 您可以使用command line batch mode自动构建资产包,并在任何主机(简单的HTTP获取)上托管它 .
请记住,您可能不需要资产包(或统一专业版) - 您可以使用WWW类轻松地从Web下载纹理和音频 . 对于纹理,您可以使用png,jpeg和tiff,用于音频wav,ogg(仅限桌面和网络播放器),mp3(仅限移动设备) . 网格加载也应该是可能的,但这需要额外的工具 .
接受的答案是现场,但有一些细微的变化,因为Unity5.6现在也支持免费版本中的所有其他功能 . 我一直在研究一个需要动态构建资产包的类似项目 . 我将发布我的代码片段,以便将来识别这一过程变得更加简单 .
但在此之前,您可能需要考虑这个过程的一些限制 . 在 Cloud 上动态构建资产包需要(Command line)批处理模式,它在命令行上运行Unity(应该安装Unity来构建软件包) . 此资产构建过程仅适用于Windows和OSX( No Linux ) . 下面给出了以批处理模式调用Unity的命令,必须从Unity可执行文件的位置执行,
这个命令创建一个空项目,
Unity -batchmode -quit -createProject <path/to/create a project>
创建项目后,您可以保存脚本以在Assets / Editor文件夹中构建资产,我编写了一个脚本来自动化为Assets / Models文件夹中的所有资产构建assetbundle的过程 .
//BuildAssets.cs using System.Collections; using System.Collections.Generic; public class BuildAssets : UnityEngine.MonoBehaviour { static void BuildAssetBundle() { int i = 0; string log = "log.txt"; string[] assetN; int N_Files; UnityEditor.AssetBundleBuild[] AssetMap = new UnityEditor.AssetBundleBuild[2]; AssetMap[0].assetBundleName = "res"; // Adding to path /Models string path = UnityEngine.Application.dataPath + "/Models"; //log System.IO.File.AppendAllText(log, System.DateTime.Now.ToString() + "\n\n"); System.IO.File.AppendAllText(log, path + "\n"); System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(path); System.IO.FileInfo[] files = dir.GetFiles(); // Number of files in "/Models" folder N_Files = files.Length; //log System.IO.File.AppendAllText(log, "Num assets: "+N_Files + " \n"); assetN = new string[N_Files]; foreach (System.IO.FileInfo file in files) { if (file.Exists) { if (!file.Extension.Equals(".meta")) { assetN[i] = "Assets/Resources/" + file.Name; System.IO.File.AppendAllText(log, assetN[i] + " \n"); i += 1; } } } AssetMap[0].assetNames = assetN; UnityEditor.BuildPipeline.BuildAssetBundles("Assets/AssetBundles", AssetMap, UnityEditor.BuildAssetBundleOptions.None, UnityEditor.BuildTarget.Android); System.IO.File.AppendAllText(log, "\t----X----\n"); //log } }
这是通过命令行构建资产包的命令 .
Unity -batchmode -quit -projectPath path/to/UnityProjects/Projectname -executeMethod BuildAssets.BuildAssetBundle -logFile <Log file location>
我测试了这个,它适用于我们的项目 .
2 回答
AssetBundles需要unity pro才能构建 . 您可以使用command line batch mode自动构建资产包,并在任何主机(简单的HTTP获取)上托管它 .
请记住,您可能不需要资产包(或统一专业版) - 您可以使用WWW类轻松地从Web下载纹理和音频 . 对于纹理,您可以使用png,jpeg和tiff,用于音频wav,ogg(仅限桌面和网络播放器),mp3(仅限移动设备) . 网格加载也应该是可能的,但这需要额外的工具 .
接受的答案是现场,但有一些细微的变化,因为Unity5.6现在也支持免费版本中的所有其他功能 . 我一直在研究一个需要动态构建资产包的类似项目 . 我将发布我的代码片段,以便将来识别这一过程变得更加简单 .
但在此之前,您可能需要考虑这个过程的一些限制 . 在 Cloud 上动态构建资产包需要(Command line)批处理模式,它在命令行上运行Unity(应该安装Unity来构建软件包) . 此资产构建过程仅适用于Windows和OSX( No Linux ) . 下面给出了以批处理模式调用Unity的命令,必须从Unity可执行文件的位置执行,
这个命令创建一个空项目,
Unity -batchmode -quit -createProject <path/to/create a project>
创建项目后,您可以保存脚本以在Assets / Editor文件夹中构建资产,我编写了一个脚本来自动化为Assets / Models文件夹中的所有资产构建assetbundle的过程 .
这是通过命令行构建资产包的命令 .
我测试了这个,它适用于我们的项目 .