2014-07-09 24 views
1

我想问问有没有人在Unity上创建Assetbundle?我想在云上动态生成AssetBundle,客户端应用程序将相应地下载它。AssetBundle服务器上的Unity

你能让我知道你的想法吗?有托管Unity的云服务吗?

回答

0

AssetBundles需要统一专业版才能构建。有一个command line batch mode,您可以使用它自动构建资产捆绑包并将其托管在任何虚拟主机上(简单的HTTP获取)。

请记住,您可能不需要资产包(或统一专业版) - 您可以使用WWW类轻松地从网络上下载纹理和音频。对于纹理你可以使用png,jpeg和tiff,用于音频wav,ogg(仅适用于桌面和webplayer),mp3(仅适用于手机)。网格加载也应该是可能的,但这将需要额外的工具。

+0

谢谢。但事实上,我的问题是如何在云上生成捆绑包。我知道可以在云上托管bundleasset。但是,无论如何还要在云上生成捆绑包吗? – Souris

+0

正如我所说,你必须有一个工作团结亲来生成捆绑。您可以在专用的OSX或Windows服务器上执行此操作 - 此服务器可以位于云端。请注意,统一可能需要一个单独的许可证。 –

+0

谢谢。亚马逊现在支持Windows Server。但是我不知道是否可以在其上运行Unity Pro?还有,是否可以从远程客户端调用Unity Pro? (例如:客户端站点) – Souris

0

接受的答案是现货,但是由于Unity5.6现在也支持免费版本中的其他功能,所以稍有改动。我一直在研究一个需要动态构建资产包的类似项目。我将发布我的代码片段,以便将来为其他人识别此过程变得更简单。

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

此命令创建一个空的项目,

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

创建项目后,就可以省下脚本在资产/编辑器文件夹中创建资产,我有一个书面脚本来自动完成资产/模型文件夹中所有资产的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> 

我测试过这个,它适用于我们的项目。