AssetBundle Unity на сервере

Я хотел бы спросить, если кто-нибудь создать Assetbundle в Unity на облаке? Я хотел бы динамически генерировать AssetBundle в облаке, и клиентское приложение загрузит его соответствующим образом.

Не могли бы вы дать мне знать свою идею? Есть ли облачный сервис для хостинга Unity?

2 ответа

Решение

AssetBundles требуется Unity Pro, чтобы построить. Существует пакетный режим командной строки, который вы можете использовать для автоматического создания пакетов ресурсов и размещения его на виртуальном любом хосте (простое получение по HTTP).

Помните, что вам могут не понадобиться пакеты ресурсов (или unity pro) - вы можете легко загружать текстуры и аудио из Интернета, используя класс WWW. Для текстур вы можете использовать png, jpeg и tiff, для аудио wav, ogg (только для настольных компьютеров и веб-плеера), mp3 (только для мобильных устройств). Загрузка сетки также возможна, но для этого потребуются дополнительные инструменты.

Принятый ответ точен, но есть небольшие изменения, поскольку 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>

Я проверил это, и это работает для нашего проекта.

Другие вопросы по тегам