2014-07-09 65 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> 

我測試過這個,它適用於我們的項目。