AssetBundle Unity на сервере

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

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


person Souris    schedule 09.07.2014    source источник


Ответы (2)


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

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

person Krzysztof Bociurko    schedule 10.07.2014
comment
Спасибо. Но на самом деле мой вопрос в том, как создать пакет в облаке. Я знаю, что можно разместить пакет в облаке. Но есть ли способ также сгенерировать пакет в облаке? - person Souris; 10.07.2014
comment
Как я уже сказал, для создания пакета у вас должен быть рабочий Unity Pro. Вы можете сделать это на выделенном сервере OSX или Windows - этот сервер может быть в облаке. Обратите внимание, что для этого единству может потребоваться отдельная лицензия. - person Krzysztof Bociurko; 10.07.2014
comment
Спасибо. Amazon теперь поддерживает Windows Server. Но я не знаю, можно ли на этом запустить Unity Pro? А также, можно ли вызвать Unity Pro с удаленного клиента? (например: клиентский сайт) - person Souris; 10.07.2014
comment
Нет встроенных функций для запуска unity на удаленном клиенте, но все, что вам нужно сделать, это создать веб-приложение / rpc, которое вызывает единство в пакетном режиме. Вам нужно будет уточнить у Amazon, будут ли они поддерживать Unity на своих серверах. - person Krzysztof Bociurko; 10.07.2014

Принятый ответ верен, но есть небольшие изменения, поскольку Unity5.6 теперь поддерживает все остальные функции в бесплатной версии. Я работал над аналогичным проектом, который требовал динамического создания пакетов ресурсов. Я опубликую свой фрагмент кода для того же, чтобы процесс идентификации стал проще для всех в будущем.

Но перед этим есть некоторые ограничения для этого процесса, которые вам, возможно, придется учитывать. Для динамического построения пакетов ресурсов в облаке требуется (командная строка) пакетный режим, который запускает Unity в командной строке ( Для сборки пакетов необходимо установить Unity). Этот процесс создания ресурсов работает только в Windows и OS X (без 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>

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

person Arvind    schedule 13.06.2017