Как сделать игру на ios на unity

Добавил пользователь Алексей Ф.
Обновлено: 19.09.2024

Здравствуйте.
Возникли сомнения по поводу разрешения экрана и просто хочу посмотреть как будет работать сцена в iPad-е. Пытаюсь собрать проект с компа(ОС Windows) для iPad.
Неделю бьюсь, так и не нашел разгадки как это сделать. Выбираю Build, ставлю галочку напротив IOS, билдю проект, проект собирается.
Захожу в папку, где сбилженный проект лежит. В папке лежит не *.app файл а "части" этого файла. Это одна странность.
Странность номер 2: при билде проекта под IOS нужен спец. mobileprovision файл, его нигде нет. UDID девайса при билдинге проекта Юнити не спрашивал.
Так что же он билдит тогда если эти его билды нигде не будут работать?
Разьясните пожалуйста по шагам как сбилдить проект под IOS.
Заранее благодарен за ответы)

А ты что хотел? Пункт первый чтобы собрать проект на iOS нужен, Mac (Mac Book) ну или на худой конец Хакинтош.
Во вторых, чтобы запустить на устройстве, нужна лицензия разработчика, провижен профайл идет с ней в комплекте.
Альтернативный вариант ломанный XCode и Jailbreak устройство. Если ты планируешь продавать приложение, то вариантов не много,
лицензия разработчика в обязательном порядке.


Весь ИТ-рынок разделился на две операционные системы: Android и iOS. Однако бизнесу важно решать свои задачи на максимальном количестве устройств и систем, поэтому необходимо разработать одинаковую по смыслу программу под каждую систему. Для этого применяются кроссплатформенные разработки. В нашей статье рассказываем, как объединить Unity3D и Xamarin как для iOS, так и для Android.

Современная IT экосистема относительно раздроблена. Разрозненность в аппаратном обеспечении волнует бизнес и прикладных программистов значительно меньше, по сравнению с требованиями к вычислительной мощности используемой платформы. При этом основные сложности реализации связаны с использованием мобильных устройств, рынок которых разделился, в основном, на две наиболее популярные операционные системы: Android и iOS.

Бизнесу важно решать свои задачи на максимальном парке устройств и систем. Для решения данной проблемы возможно разработать одинаковую, по смыслу, программу под каждую систему. Однако это потребует привлечения отдельных команд для разработки под каждую из них. При этом в процессе развития и поддержки будут накапливаться отличия в реализациях.

Для уменьшения издержек, в среде программистов популярно использование кроссплатформенной разработки. В этом случае вся программа или ее часть реализуется универсально сразу для нескольких платформ одной командой специалистов. При этом инструментов кроссплатформенной разработки опубликовано довольно много.

Одной из крайностей при написании программы или ее части является использование языка C/C++, что позволяет добиться значительных показателей производительности, что приведет к увеличению сроков и общей стоимости разработки. Другой крайностью является Web-технологии. В настоящее время интернет-сайты открываются практически на любых современных устройствах с экраном. При этом даже при использовании специализированных оптимизированных библиотек разработчики сталкиваются с крайне низкой производительностью и ограничениями функциональности.

Так, для случаев, когда требуется создать классическое интерфейсное приложение скомпилированное под несколько платформ, возможно использование Xamarin и его Xamarin.Forms. При это, если необходимо применение 3D-графики, а также дополненной и виртуальной реальностью, то оптимальным будет использование Unity3D. Работа с 3D-графикой в Xamarin возможна, но значительно сложнее. Разрабатывать интерфейсы в Unity3D также возможно, но функциональность инструментария недостаточна, а плавность и отзывчивость интерфейса ниже. Кроме этого существуют наработки, побуждающие разработчиков работать в одной или другой среде.

Начиная с версии Unity3D 2019.3, появилась возможность интегрировать проект в качестве библиотеки в нативные Android и iOS приложения. Однако больший интерес представляет возможность встраивать Unity3D в Xamarin приложение, используя при этом один и тот же Xamarin проект для обоих платформ.

В версиях Unity3D 2019.3+ изменилась структура экспортируемого проекта, как для iOS, так и для Android. Из-за чего весь основной проект заключен в библиотеке unityLibrary и UnityFramework, а для его запуска используется так называемая обертка (Launcher и Unity-iPhone). Особый интерес представляет возможность ее замены на альтернативный Xamarin проект.

Описание пути достижения подобного результата и является основной целью этой статьи.

Предварительная подготовка Unity3D

Для начала нужен Unity3D проект, с самим проектом нужно будет сделать минимум изменений. До внесения изменений желательно убедиться, что приложение работает как нужно. В настройках необходимо выставить Bundle Id для iOS и Android. Также можно выставить Signing Team Id для iOS, это может помочь далее в процессе подписи приложения.

Необходимо добавить AndroidManifest.xml, где необходимо закомментировать , эта строка отвечает за вывод иконки приложения в меню Android. В данном случае эта иконка будет лишней.

Также нам может понадобиться переопределить UnityActivity, с помощью OverrideUnityActivity.java, это необходимо для перехвата системных событий юнити, отвечающих за выход из приложения и за выгрузку Unity части приложения из памяти.

Подготовим Xamarin проект

Так же как в Unity3D проекте, выставим Bundle Id для iOS и Android. В нашем случае это пустой Xamarin.Forms проект, с одним общим проектом и двумя проектами под iOS и Android соответственно. Добавим в общий проект интерфейс ILaunchActivity содержащий один метод LaunchUnity. А также 2 заглушки LaunchActivity в проекты iOS и Android. Визуально он будет представлять из себя кнопку для запуска Unity3D, нажатие на которую будет вызывать метод LaunchUnity.

Подготовим IOS часть нашего приложения

1. Для начала построим Unity проект под iOS. Открываем проект в xcode, проверяем подписи для целей Unity-iPhone и UnityFramework. Сертификат разработчика должен совпадать с тем, что будет использован при построении приложения.



2. Меняем Target Membership у папки Data на UnityFramework. В папке Data содержаться ресурсы, необходимые Unity3D приложению для работы. Эти ресурсы могут попасть в результирующий проект либо в составе UnityFramework, либо непосредственно могут быть добавлены в финальный проект.


3. Сделаем билд цели UnityFramework в xcode. Возьмем получившийся UnityFramework.framework в Finder и сохраним его.


4. Открываем Xamarin Solution в Visual Studio 2019 for Mac.

5. Создаем новый проект Binding.Unity.Ios (Binding Library), он будет отвечать за взаимодействие с Unity3D. К сожалению, в случае iOS генератор API не реализован, необходимо будет описать API самостоятельно. Добавим туда код биндинга к Unity API. Это 3 cs-файла из корня репозитория.

6. Добавим сохраненный ранее UnityFramework.framework как Native Reference в проект Binding.Unity.Ios и построим проект.

Если в процессе не возникло ошибок добавим Binding.Unity.Ios в зависимости к Main.iOS.

7. Добавим реализацию запуска Unity на iOS платформе.

Часть LaunchActivity.cs:

Console.WriteLine("Unity launching on ios");

var currentWindow = UIApplication.SharedApplication.KeyWindow; // сохраним текущее окно, где мы сейчас находимся

var args = Environment.GetCommandLineArgs(); // получим аргументы запуска исходного приложения, их необходимо будет передать Unity3D части

var ufw = UnityFramework.GetInstance(); // получим ссылку на Unity библиотеку

var listener = new MyUnityListener(currentWindow, ufw); // класс будет отвечать за перехват системных событий Unity3D

ufw.SetDataBundleId("com.unity3d.framework"); // задаем местоположение папки Data, это не нужно, если папка будет добавлена в основной проект

ufw.RegisterFrameworkListener(listener); // регистрируем обработчик системных событий

ufw.ShowUnityWindow(); // и переключаемся на окно Unity3D

Класс MyUnityListener наследуется от UnityFrameworkListener и может переопределить методы UnityDidQuit и UnityDidUnload. Перехват UnityDidUnload позволяет при вызове из Unity метода Application.Unload, перейти в основном приложении на другое окно, например так: currentWindow.MakeKeyAndVisible();

Наш проект также использовал дополненную реальность на стороне Unity3D. Для работы этому функционалу нужен доступ к камере телефона. Это необходимо указать в Info.plist проекта Main.IOS: Privacy – Camera Usage Description = Needed for AR

Проверим настройки подписи Main.IOS и построим основной проект. В результате мы должны получить проект, который по нажатию кнопки в интерфейсе запустит Unity3D часть.

Подготовим Android проект

Далее нам будет необходимо построить часть этого проекта на Android Studio, как Android AAR библиотеку. Для этого создадим пустой новый проект в Android Studio.

Откроем Settings.Gradle и добавим туда ссылку на UnityLibrary нашего Unity3D проекта:

include ':unityLibrary'

project(':unityLibrary').projectDir=new File('../unity-app/buildAndroid/unityLibrary') // путь до unity-app/buildAndroid/unityLibrary

Так как наш проект работает с дополненной реальностью, он использует нативные .aar библиотеки ARCore, как зависимости. Созданный нами Android проект не сможет объединить их с кодом Unity в единый AAR. Поэтому необходимо закомментировать их использование:

// implementation(name: 'arcore_client', ext:'aar')

// implementation(name: 'ARPresto', ext:'aar')

// implementation(name: 'unityandroidpermissions', ext:'aar')

// implementation(name: 'UnityARCore', ext:'aar')

Построим проект UnityLibrary в Android Studio, результатом чего станет файл unityLibrary\build\outputs\aar\unityLibrary-debug.aar.

Перейдем в Xamarin, добавим там проект Android Binding Library. В Jars нового проекта добавляем ссылку на полученный ранее AAR как LibraryProjectZip. Строим Binding Library.

В случае Android – код для взаимодействия будет сгенерирован автоматически.
Добавляем binding.unity.android как зависимость в Main.Android.

Добавим код запуска Unity:

Console.WriteLine("Unity launching on android");

var intent = new Intent(Forms.Context, typeof(CustomUnityPlayerActivity)); // создаем Intent

Forms.Context.StartActivity(intent); // и запускаем его

Здесь также используется CustomUnityPlayerActivity класс, который помогает там обработать события Unity3D, он наследуется от OverrideUnityActivity (того java-класса, что был добавлен в Unity3D проект). Мы можем переопределить OnUnityPlayerQuitted и OnUnityPlayerUnloaded. В OnUnityPlayerUnloaded мы, аналогично с iOS перейдем на исходное окно.

var intent = new Intent(Forms.Context, typeof(MainActivity));

Forms.Context.StartActivity(intent);

Остается пара мелочей: необходимо добавить в проект ресурс, без которого Unity3D часть не стартует, values/strings.xml с содержимым.

Game view

Также нужно не забыть добавить закомментированные ранее .aar библиотеки ARCore в проект Main.Android как AndroidAarLibrary.

После этого можно построить проект и протестировать его.

В результате у нас получилось 2 приложения, основанные на одной кодовой базе. Первое тесты показали, проект запускается, в нем работает дополненная реальность. Катастрофической потери производительности не наблюдается.

Как создавать неигровые приложения в Unity

Unity – это игровой движок и интегрированная среда разработки, используемые миллионами разработчиков для вывода игр на Android, iOS, Windows, консоли и многие другие платформы. В настоящее время это самый популярный игровой движок на платформе Android благодаря оптимизированному интерфейсу и рабочему процессу, а также богатому набору функций и отличной универсальности.

Хотя Unity в первую очередь нацелена на разработку игр, она не ограничивается только играми. На самом деле нет причин, по которым вы не можете использовать Unity для создания множества других инструментов, утилит, бизнес-приложений и тому подобного. И для этого есть несколько веских причин! В этом посте я объясню, почему вы можете захотеть создать неигровое приложение в Unity и как вы можете это сделать.

Причины создания неигровых приложений в Unity

Как создавать неигровые приложения в Unity

Зачем вам разрабатывать неигры с помощью Unity, если у вас есть отличная IDE в Android Studio? Есть несколько веских причин.

Быстрое развитие

Для создания приложения в Unity требуется гораздо меньше кода, чем для большинства традиционных альтернатив.

Вдобавок к этому Unity использует особенно интуитивно понятный и быстрый пользовательский интерфейс. Во многом это связано с перетаскиванием, и для создания пользовательского интерфейса не требуется знания XML. При создании неигровых приложений в Unity вам нужно будет делать гораздо менее реальное кодирование, и многие вещи, такие как добавление изображения к кнопке или использование пользовательского шрифта, чрезвычайно просты. Так и должно быть, но если вы попробуете что-то из этого с Android Studio, вы обнаружите, что это вызывает головную боль!

Кросс-платформенная разработка

Unity – это кроссплатформенный инструмент, а это означает, что вы можете легко создавать приложения для Android, iOS и Windows с минимальными изменениями. Если вы разработчик и хотите охватить максимально широкую аудиторию, это значительное преимущество (хотя справедливо отметить, что другие инструменты, такие как Xamarin, также позволят вам это сделать).

Мощные функции

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

Причины не создавать неигровые приложения в Unity

Как создавать неигровые приложения в Unity

Хотя с помощью Unity вы можете создавать множество мощных неигровых приложений, вы обнаружите, что у него есть свои ограничения. Как и во всем остальном, это случай выбора правильного инструмента для работы.

Вот несколько причин, по которым Unity может быть не лучшим выбором для вашего приложения.

Большие размеры приложений

Unity – это игровой движок, и он включает в себя много кода для поддержки различных функций, которые он предоставляет разработчику. Это означает, что вы мгновенно увеличите размер своего приложения, полагаясь на него.

Это заставит некоторых разработчиков отказаться от использования Unity без крайней необходимости. Но на самом деле разница в размерах довольно незначительна и вряд ли существенно повлияет на субъективный пользовательский опыт.

Отсутствие встроенной поддержки некоторых функций

Кроссплатформенный характер Unity означает, что он не может успевать за каждой новой разработкой для каждой операционной системы или любого оборудования. Аналогичным образом, игровой характер инструмента означает, что поддержка таких устройств, как датчики отпечатков пальцев, не является приоритетом.

Хотите создать приложение на языке материального дизайна, которое включает стандартный набор кнопок и текстовых полей и позволяет пользователям делать такие вещи, как отключение Wi-Fi или отправку текста? Вам будет намного проще использовать Android Studio.

Если для вас это не важно, то Unity все равно стоит рассмотреть.

Как создать неигровое приложение в Unity: краткое руководство

Теперь вы знаете, почему Unity – ценный инструмент для создания неигровых приложений, следующий шаг – просто начать. Как вы можете использовать Unity для создания тестов, калькуляторов, бизнес-приложений и тому подобного? Вот краткое руководство на примере простого приложения для тренировок.

Использование холста

Сначала создайте новый 2D-проект Unity. Отсюда мы в основном будем использовать холст, поэтому вам нужно добавить его в свою сцену.

Для этого перейдите в GameObject> UI> Canvas.

Холст – это большой невидимый слой, закрывающий экран. Обычно это используется для отображения элементов управления, рекордов и т.д. Однако его также можно использовать в качестве основного представления при создании меню и т.п.

Как создавать неигровые приложения в Unity

Масштабирование под разные размеры устройств

Как создавать неигровые приложения в Unity

Например, если вы привязываете текст к центру экрана, то координаты X и Y будут равны 0, если он находится точно в центре. Теперь текст всегда будет посередине, независимо от размера устройства. Вы также можете привязать к левому верхнему или правому нижнему углу, а затем построить вокруг этого другие элементы.

Создание интерактивности

Затем вам нужно будет обрабатывать клики и позволить людям действительно взаимодействовать с созданным вами пользовательским интерфейсом.

Возможно, на данный момент лучшим вариантом было бы просто, чтобы эта кнопка переводила нас к следующей сцене, которая может, например, воспроизводить нашу тренировку.

Как создавать неигровые приложения в Unity

Вам также необходимо добавить следующую строку вверху:

Это говорит Unity, что мы хотим получить доступ к функциям, связанным с переключением уровней и экранов.

И в этом есть большой смысл, если вы начнете пытаться использовать Unity как нечто большее, чем просто инструмент для создания игр: потому что сцена также может быть меню или другим экраном служебного приложения. Элементы, используемые от одной сцены к другой, могут быть совершенно разными!

Сцены в Unity обычно являются игровыми уровнями, но их можно использовать для разных экранов служебного приложения.

Затем создайте пустой GameObject, в котором будет размещен ваш скрипт, а затем добавьте его в поле с надписью None (Object). К сожалению, вы не можете просто перетащить скрипт сюда, потому что вам нужен экземпляр класса, на который нужно ссылаться. После этого вы можете использовать раскрывающееся меню рядом с этим полем справа, чтобы выбрать метод, который вы хотите активировать. В данном случае это будет MenuControl.Play ().

Как видите, это довольно простой процесс, и так же легко добавить сюда столько других методов, сколько захотите. Теперь у вас есть возможность добавлять кнопки и текст, а затем добавлять взаимодействия с этими элементами, вы можете делать практически все!

Еще больше хитростей

Как создавать неигровые приложения в Unity

Кнопки в разных сценах могут делать множество разных вещей. Например, вы можете заставить их показать или переместить трехмерный объект или воспроизвести короткое видео. Вы также можете манипулировать переменными и значениями и отображать их как часть строки с помощью текстовой метки. Сохранение файлов работает так же, как и при создании игры, как и воспроизведение звуков.

Если вы знаете, как использовать Unity для разработки игр, вы можете применить все эти навыки здесь.

Вы также найдете множество полезных компонентов пользовательского интерфейса, которые можно добавить на холст, например флажки, которые полезны при создании онлайн-формы или анкеты.

Другими словами, если вы знаете, как использовать Unity для разработки игр, вы можете применить все эти навыки и здесь. Надеюсь, это руководство дало вам краткий обзор того, как думать о Unity в этом контексте, так что вы можете выйти и создать свое собственное неигровое приложение в Unity уже сегодня!

Запуск приложения на iPhone из под Xcode
Всех приветствую! Сделал приложение, в эмуляторе работает. Заплатил $99, прошел все стадии на.

Запуск exe, собранного в VS2010, на других компьютерах
Здравствуйте. Такая проблема. Писал раньше программы на Visual Studio 2010 console application, в.


Дизассемблирование приложения, собранного из MFC
Очень хочется создать на языке ассемблера шаблон Ribbon-интерфейса. Сделал в Visual Studio пример.

karpinochkin, вы не можете просто так взять и затащить на телефон приложение iOS в отличие от андроид. Вам придётся либо ломать прошивку либо покупать аккаунт и заливать на маркет

заливать на маркет вовсе необязательно.
с платным аккаунтом разработчика ($99) можно заливать на 100 разных девайсов, а с ентерпрайз аккаунтом ($299) можно заливать на неограниченное кол-во девайсов.
Вот только несколько способов:
- собрать ipa и залить через шнур используя iTunes
- собрать напрямую на девайс
- собрать ipa и залить over-the-air (OTA)
- собрать ipa и залить в AppleStore и тестировать в TestFlight

Можно так же использовать не проплаченный аккаунт разработчика и заливать напрямую из Xcode, но эта версия будет валидна всего несколько дней, т.к. предназначена исключительно для отладки на устройстве.

Читайте также: