1

我想问是否有人在云上的 Unity 中创建 Assetbundle?我想在云上动态生成 AssetBundle,客户端应用程序会相应地下载它。

你能告诉我你的想法吗?是否有任何托管 Unity 的云服务?

4

2 回答 2

3

公认的答案是正确的,但有一些细微的变化,因为 Unity5.6 现在也支持免费版本中的所有其他功能。我一直在从事一个需要动态构建资产包的类似项目。我将发布我的代码片段,以便将来对其他人进行识别的过程变得更简单。

但在此之前,您可能需要考虑此过程的一些限制。在云上动态构建资产包需要(命令行)批处理模式,它在命令行上运行 Unity(应安装 Unity 以构建包)。此资产构建过程仅适用于 Windows 和 OSX(无 Linux)。下面给出了以批处理模式调用 Unity 的命令,并且必须从 Unity 可执行文件的位置执行,

此命令创建一个空项目,

Unity -batchmode -quit -createProject <path/to/create a project>

创建项目后,您可以在 Assets/Editor 文件夹中保存构建资产的脚本,我编写了一个脚本来自动为 Assets/Models 文件夹中的所有资产构建资产包的过程。

//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>

我已经对此进行了测试,它适用于我们的项目。

于 2017-06-13T05:59:58.983 回答
0

AssetBundles 需要 unity pro 来构建。有一个命令行批处理模式,您可以使用它来自动构建资产包并将其托管在虚拟任何主机上(一个简单的 HTTP 获取)。

请记住,您可能不需要资产包(或 unity pro) - 您可以使用WWW类轻松地从 Web 下载纹理和音频。对于纹理,您可以使用 png、jpeg 和 tiff,用于音频 wav、ogg(仅限桌面和网络播放器)、mp3(仅限移动设备)。网格加载也应该是可能的,但这需要额外的工具。

于 2014-07-10T08:23:16.353 回答