Автоматическая сборка нескольких таргетов

Общие вопросы о Unity3D

Автоматическая сборка нескольких таргетов

Сообщение burlak 10 окт 2011, 16:05

Привет!

Решил упростить себе жизнь сделав автоматическую сборку всех таргетов.
Синтаксис:
Используется csharp
private static void execute(){
                PlayerSettings.keystorePass = "5звездочек";
                PlayerSettings.keyaliasPass = "5звездочек";
               
                PlayerSettings.Android.targetDevice = AndroidTargetDevice.ARMv7;
                PlayerSettings.Android.targetGraphics = AndroidTargetGraphics.OpenGLES_2_0;
               
                PlayerSettings.bundleIdentifier = "com.galapagossoft.trialx2_gl2";
                PlayerSettings.productName = "Trial X2 HD";
                BuildPipeline.BuildPlayer(getScenes(1000), "../Releases/TrialX_GL2.apk", BuildTarget.Android, BuildOptions.None);
               
                PlayerSettings.bundleIdentifier = "com.galapagossoft.trialx2_gl2_demo";
                PlayerSettings.productName = "Trial X2 HD Demo";
                BuildPipeline.BuildPlayer(getScenes(App.DemoLevelsCount+1), "../Releases/TrialX_GL2_Demo.apk", BuildTarget.Android, BuildOptions.None);
               
                PlayerSettings.Android.targetDevice = AndroidTargetDevice.ARMv6WithVFP;
                PlayerSettings.Android.targetGraphics = AndroidTargetGraphics.OpenGLES_1_x;
               
                PlayerSettings.bundleIdentifier = "com.galapagossoft.trialx2_gl1";
                PlayerSettings.productName = "Trial X2";
                BuildPipeline.BuildPlayer(getScenes(1000), "../Releases/TrialX_GL1.apk", BuildTarget.Android, BuildOptions.None);
               
                PlayerSettings.bundleIdentifier = "com.galapagossoft.trialx2_gl1_demo";
                PlayerSettings.productName = "Trial X2 Demo";
                BuildPipeline.BuildPlayer(getScenes(App.DemoLevelsCount+1), "../Releases/TrialX_GL1_Demo.apk", BuildTarget.Android, BuildOptions.None);
        }
 


Работает, но теперь хотелось бы как то передать в сборку ключи компиляции или хотя бы как то поменять значения констант. Задача следующая - надо чтобы gl1demo версия ссылалась на g1full, a gl2demo ссылалась на gl2full. Не подскажете какими путями это можно решить?

Пытался найти доступ к имени приложения изнутри приложения. Этого было бы достаточно, но не нашел(

Вероятно можно просто менять файл с кодом? Но как это сделать правильно?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Автоматическая сборка нескольких таргетов

Сообщение gnoblin 10 окт 2011, 16:26

Не знаю в тему ли это - я копирую сцену, меняю в ней всё что нужно - билдю, возвращаю обратно.
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Автоматическая сборка нескольких таргетов

Сообщение burlak 10 окт 2011, 16:53

gnoblin писал(а):Не знаю в тему ли это - я копирую сцену, меняю в ней всё что нужно - билдю, возвращаю обратно.


Ну я до сей поры тоже все делал ручками. Но это неэффективно - надо компилить 8 таргетов, для каждого указать имя, варианты сборки, списки сцен и т.п.

Думаю проще всего сделать префаб с компонентой с нужными полями и их менять. Это не потребует перекомпиляции. А вот код менять - стремно как то.
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Автоматическая сборка нескольких таргетов

Сообщение burlak 10 окт 2011, 17:07

Гноблин, может я неправильно тебя понял... Ты кодом сцену копируешь?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Автоматическая сборка нескольких таргетов

Сообщение gnoblin 10 окт 2011, 18:30

кодом
skypeid: madkust
Мои крайние проекты:
Убойный Хоккей
Cube Day Z (альфа)
Аватара пользователя
gnoblin
Адепт
 
Сообщения: 4633
Зарегистрирован: 08 окт 2008, 17:23
Откуда: Минск, Беларусь
Skype: madkust
  • Сайт

Re: Автоматическая сборка нескольких таргетов

Сообщение burlak 11 окт 2011, 00:47

Сделал вот так:
Синтаксис:
Используется csharp
        private static void setupConst (bool isDemoversion, string link) {
                GameObject obj = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/!Prefabs/TargetSettings.prefab", typeof(GameObject));
               
                GameObject newObj = (GameObject)Instantiate(obj);
                TargetSettings settings =  newObj.GetComponent<TargetSettings>();
                settings.isDemoversion = isDemoversion;
                settings.fullVersionLink = link;
                EditorUtility.ReplacePrefab(newObj, obj, ReplacePrefabOptions.ReplaceNameBased);
               
                EditorApplication.SaveAssets();
                DestroyImmediate(newObj);
               
                GameObject obj2 = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/!Prefabs/TargetSettings.prefab", typeof(GameObject));
                TargetSettings settings2 =  obj2.GetComponent<TargetSettings>();
                print("change link "+settings2.fullVersionLink);
        }
 


TargetSettings - моя компонента с "константами".
Код работает, но не покидает чувство его кривизны. Должен же быть более элегантный способ поправить префаб, который находится в проекте. Без инстанцирования и замены на новый.
Пробовал просто загрузить компоненту, поменять ей значения и сохранить изменения - нифига измнения не цепляются:
Синтаксис:
Используется csharp
        private static void setupConst (bool isDemoversion, string link) {
                GameObject obj = (GameObject)AssetDatabase.LoadAssetAtPath("Assets/!Prefabs/TargetSettings.prefab", typeof(GameObject));
                TargetSettings settings =  obj.GetComponent<TargetSettings>();
                settings.isDemoversion = isDemoversion;
                settings.fullVersionLink = link;
                AssetDatabase.SaveAssets();
        }
 


К сожалению данный раздел справки крайне скуп на примеры да и вообще на объяснения. Прошу, ткните меня носом, где можно посмотреть примеры?
С уважением, Дмитрий Бурлаков.
skype: dmitry.burlakov
email: _dmitry.burlakov@gmail.com
Аватара пользователя
burlak
UNITрон
 
Сообщения: 326
Зарегистрирован: 28 янв 2010, 10:21
Откуда: Санкт-Петербург

Re: Автоматическая сборка нескольких таргетов

Сообщение seaman 11 окт 2011, 06:36

1. По моему после сохранения нужно:
AssetDatabase.Refresh
2.. Посмотри пример CharacterCustomization как там сохраняют данные о персонажах в CharacterElementHolder.
seaman
Адепт
 
Сообщения: 8352
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 12