Buffer icon Проекты
37 заметок с тегом

с#

Позднее Ctrl + ↑

Создание плагинов для Unity

Плагины для Unity

Плагины для Unity

Плагины для Unity

Пишу статью про создание плагинов для Unity под iOS и Android. Нужны комменты и советы.

За несколько лет, я сделал большое количество различных плагинов. Многие они не в паблике и опенсорс, но это не надолго (надеюсь :).

Есть куча ситуаций когда одной Unity недостаточно и нужно использовать возможности платформы. Банально, но до сих пор, в Unity нет работы с галерей и камерой из коробки :) Смешно? Не очень. В Xamarin есть, а в Unity нет.

Для многих менее опытных разработчиков, создание плагина для Unity под мобильную платформу кажется чем-то сложным, но на деле, это не так сложно и страшно. По крайней мере, организовать простое взаимодействие — достаточно просто. В статье, будет шаблон для Android (на Java) и iOS (на Obj-C) для создания плагинов и их связи с Unity приложением.

Поэтому вопрос: о создании каких плагинов вы бы хотели прочитать в первую очередь? Примеры: галерея, уведомления, браузер, покупки, шаринг, [продолжите]...

 1 комментарий    1765   2020   android   apple   camera   ios   plugin   unity   разработка   с#

Unity EventBus на интерфейсах

public class SaveLoadManager : Monobehaviour, IQiuckSaveHandler
{
    private void OnEnable()
    {
        EventBus.Subscribe(this);
    }

    private void OnDisable()
    {
        EventBus.Unsubscribe(this);
    }

    private void HandleQuickSave()
    {
        // код сохранения
        ...
    }
}

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

Unity & iOS capabilities

iOS capabilities list

iOS capabilities list

iOS capabilities list

Как оказалось, даже для последних версий Unity, есть проблема программно выставить нужные параметры в Xcode проекте :( А это необходимость, иначе никакой CI\CD не работает и придётся билдить iOS версию вручную, что конечно не очень правильно.

Для этих целей в Unity есть специальный PostProcessBuildAttribute и PBXProject. После билда в Xcode проект, можно настраивать уже другие параметры, не доступные внутри Unity. Но, даже следуя мануалам, как-то оно не всё работает...

Так, например, чтобы добавить функцию Sign in with Apple, нужно воспользоваться ProjectCapabilityManager. В коде это выглядит примерно так:

...
string projectPath = string.Format ("{0}/Unity-iPhone.xcodeproj/project.pbxproj", path);
PBXProject project = new PBXProject ();
string file = File.ReadAllText (projectPath);
project.ReadFromString (file);
string target = project.GetUnityMainTargetGuid ();
string entFile = "game.entitlements";
ProjectCapabilityManager manager = new ProjectCapabilityManager (projectPath, entFile, "Unity-iPhone", target);
manager.AddSignInWithApple ();
// other capabilities
manager.WriteToFile ();

Но таким образом файл X.entitlements не добавляется в проект, создаётся, но не добавляется. И через project.AddFile() — тоже. Спасает как всегда stackoverflow :) Оказывается, помимо project.AddFile() надо добавить ещё специальный property, чтобы всё закрутилось:

...
project.AddFile (entFile, entFile);
project.AddBuildProperty (target, "CODE_SIGN_ENTITLEMENTS", entFile);
File.WriteAllText (projectPath, project.WriteToString ());

Почему это не написано в мануале Unity — непонятно.

Градиентный текст в Unity

В пакете TextMeshPro уже есть встроенная градиентная заливка, но для моей задачи она не совсем подходила, потому что работает для каждого символа отдельно. Выглядит это так:

Градиент для каждой буквы

Градиент для каждой буквы

Градиент для каждой буквы

Пришлось написать небольшой скрипт, который вешается на текстовый компонент, берёт цвета градиента из свойств и применяет его для всего текста. Стало выглядеть так:

Градиент для всего текста

Градиент для всего текста

Градиент для всего текста

Принцип простой: разбиваем градиент для количество букв и потом по порядку применяем для каждой буквы свой диапазон.

Исходник

Теперь будет гуглится по full text gradient unity :)

TabsView для Unity

Сегодня у нас раздел «Велосипедостроение» :)

Если DOTween в проекте не используется, можно его выпилить и сделать вручную, чтобы не тащить библиотеку.

Когда-то давно понадобилось сделать в UI горизонтальную прокрутку табами. В iOS есть такой стандартный элемент. В Android по-моему тоже. Для Unity как известно стандартные UI компоненты довольно скудны. Поэтому каждый придумывает себе, по мере надобности. Вот и получилось когда-то такое, довольно простое решение.

  • Управляется свайпами
  • Есть индикаторы состояния табов
  • Анимации можно делать любые, с помощью DOTween
  • На переключение таба можно повесить хук

Исходники на Github

 1 комментарий    602   2020   git   unity   разработка   с#

Unity, нейросеть и птички

Очень простой и понятный пример обучения нейросети с линейной функцией активации. Короче, для самых начинающих. Можно переделать под что-то своё и поинтересней.

Спойлер.
В примере, птички обучились пролетать препятствия за 40+ генераций.

Исходники на Github

 1 комментарий    1866   2019   unity   нейросети   с#

LeoECS 2.0

Там Leopotam обновляет свой ECS — один из самых быстрых, легких, «памятинежрущих» ECS для Unity и вообще C#.

В новой версии была попытка переделать всё на структуры, но особого буста это не дало, а неудобств прибавило. Поэтому возврат на классы и, переделка почти с нуля.

Теперь нет отложенных операций, всё применяется сразу, есть автоинжект фильтров и «мира», переделано API, но обратная совместимость для перехода осталась. Создавать сущности и добавлять компоненты теперь удобней и понятней.

Пока в dev-ветке, но релиз скоро.
Чатик на gitter.im
Discord канал

 Нет комментариев    1462   2019   ecs   unity   с#

Уведомления в Unity

Юнитеки всё никак не могут сделать нормальный плагин для управления уведомлениями :( Вот и сейчас, вроде что-то новое и вроде даже удобное, но нет возможности принимать push сообщения с сервера. Почему? Это же фича которая используется почти во всех онлайн играх.

Так и придётся пока использовать нативные самописные плагины, печаль...

Исходники примера

 Нет комментариев    783   2019   android   ios   plugin   unity   с#   уроки

Crop и scale текстур в Unity

Понадобилось делать простой кроп и ресайз картинки в Unity, но пространство имен System.Drawing.Imaging недоступно. Поэтому, чтобы изменить размер или вырезать часть из исходного изображения, все операции пришлось делать через Texture2D.

Демка и исходники на Github.

Ссылка на Github

Ранее Ctrl + ↓