Избранное Все заметки GitHub icon Мой Github Обо мне
61 заметка с тегом

unity

Подборка статей по мультиплееру

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

Также при создании онлайн игры надо будет решить кучу важных моментов: протокол, регистрация и синхронизация игроков, защита от читеров и ботов, лаги, пинг, предсказание, и т. д. И это всё надо учесть как на сервере, так и на клиенте. Да, уже есть готовые фреймворки и онлайн сервисы, где всё это реализовано с примерами клиентов на разных языках и платформах. И в некоторых статьях про это тоже есть.

Ниже небольшая подборка статей и видео, которые ввели меня в курс дела и теперь почти на все эти вопросы, я нашёл ответы.

16 февраля   unity   игры   разработка   ссылки   уроки

Генерация документации C# проекта

Как вы комментируете свой код?
Или так: вы комментируете свой код? :)

В своих Unity проектах я использую XML документацию. Это позволяет редактору кода или IDE использовать IntelliSense — всплывающие подсказки, автодополнение кода и т. п.

Для Visual Studio Code есть плагин в маркете C# XML Documentation Comments. Достаточно написать /// (три слеша) и плагин сгенерирует комментарий в нужном формате. Это удобно, это правильно, так надо делать :) В смысле, комментировать код.

Потом, с помощью таких XML комментариев можно сгенерировать документацию всего проекта. Например, с помощью Doxygen. Скармливаем Doxygen папку со скриптами и на выходе получаем что-то такое:

HTML документация
7 февраля   unity   инструменты   разработка   с#

Unity blur effect и 2 камеры

В этом примере, я собрал сразу два интересных момента:

  1. как сделать размытый фон
  2. как использовать сразу 2 камеры

Для чего это может понадобиться? Например, чтобы одна камера была для игры, с настроенными пост эффектами, другая для интерфейса. Или чтобы сделать вот такой эффект размытия. В общем-то, можно и 3 камеры использовать. Зависит от потребностей и фантазии...

Фокус в том, чтобы настроить камеру на рендер только нужного слоя.
Как было сделано в этом примере:

  • Объекты или контейнер которые должны быть размыты, находятся в слое Blur
  • Blur camera рендерит только слой Blur (Culling Mask)
  • Для Main camera этот слой отключён, стоит флаг Depth only и глубина больше, чем у Blur camera
  • Ну и на Blur camera висит собственно скрипт размытия

По такому же принципу можно одновременно и 3 камеры сделать. Если потребуется.

Исходник на Github

29 января   camera   git   unity   графика   разработка

Unity android plugin + onActivityResult

Автор приводит пример, как он решил вопрос с обработкой onActivityResult в андроидах плагинах для Unity. Создаёт отдельный активити, там перехватывает и завершает. Норм решение.

Ещё можно сделать специальный плагин который будет наследоваться от UnityPlayerActivity и прописать его в манифесте, чтобы он запускался первым. Там тоже можно переопределить onActivityResult.

Ну и ещё как вариант, запускать во фрагменте (fragment) и обрабатывать там.

25 января   android   plugin   unity   ссылки
23 января   unity   видео   с#

Unity на Linux

Оно работает!

Всмысле не оболочка Unity, а редактор Unity :)
На выходных решил проверить, как там Ubuntu и всё «вот это вот с ней»... Оказалось, что всё хорошо-то. Всё работает, обновляется, есть куча разного софта, Unity в конце концов.

Последний раз я ставил какой-то Linux года 3-4 назад, но как-то не пошло. Даже не знаю почему. Потом пересел на MacOS и забыл про Linux и Windows. И вот — Ubuntu 16.04 LTS. Полёт нормальный. Оборудование на ноутбуке определилось, тачпад, камера, звук и т. д. Конечно, я сразу загуглил «ubuntu после установки» и проделал несколько настроек, но в целом — всё норм. Почему Ubuntu? Я не разбираюсь в 100500 дистрибутивах, да и не охота как-то, поэтому выбрал, тот что на слуху.

Так вот, по поводу Unity. Оказывается сборки под линукс делаются регулярно. И последняя версия которую я скачал и установил Unity-2017.3.0p2, вполне себе работает. Правда, я пока ничего не пробовал на ней сбилдить, но обязательно проверю :) Версия под линукс всё ещё в бете, поэтому возможны косяки. Но я к этому готов.

VSCode тоже есть под линукс и отлично работает. Думал ещё SourceTree поставить, но разработчики не планируют её выпускать для линукса. Жаль конечно, но на форуме где обсуждалось (и осуждалось) это решение, я нашёл пост про GitKraken. И, он очень даже хорош! Также есть аналог маковского homebrew — linuxbrew.

В общем, линукс — это не страшно и не больно :_) На нём даже игры делать можно...

21 января   linux   unity   инструменты   мысли

Как добавить фреймворк в секцию Embedded в XCode

Этой возможности не было до Unity 2017. Надо было вручную или сторонними средствами после билда проекта добавлять нужные фреймворки. ORLY?
Теперь же, с помощью AddCopyFilesBuildPhase это сделать можно. Последний параметр говорит об этом:

The «subfolder spec». The following usages are known: «10» for embedding frameworks; «13» for embedding app extension content; «16» for embedding watch content.

Готовый пример

А ещё можно подключить UnityEditor.iOS.Xcode.Extensions и использовать AddFileToEmbedFrameworks.

Но, они до сих пор так и сделали возможность добавлять нужные локализации в XCode проект... :(

19 января   ios   iphone   unity

Unity & ECS

Тут Leopotam новый ECS для Unity запилил

Предлагаю тестить и пробовать что-нибудь сделать https://github.com/Leopotam/ecs
Обсуждение на Reddit
Чатик на gitter.im

Что такое ECS и зачем он нужен?

Подробно на примере другого фреймворка https://habrahabr.ru/post/197920/

Unity тоже делают свой ECS

Когда-нибудь в 2018 доделают :) Там же и про штатный DI https://www.youtube.com/watch?v=tGmnZdY5Y-E

27 декабря   ecs   unity   разработка   с#

Unity 2017.3

Вышла новая версия Unity 2017.3. Последний релиз в этом году. Кроме привычных улучшений графики и производительности (ага), есть пара интересных вещей:

  • Панорамные видео 360/180
  • Улучшение системы частиц
  • Пользовательские сборки
    Теперь можно определять свои сборки, чтобы они каждый раз не компилировались, экономя время. Актуально для больших проектов.
  • Поддержка Mono .NET 2.0 в Managed Memory Profiler
  • Обновление библиотеки сжатия Crunch
    Теперь в 2,5 раза быстрее DXT и есть ETC_RGB4 и ETC2_RGBA8
  • Улучшение графики
  • Улучшение света
  • Поддержка Xbox One X
  • Поддержка Xiaomi Store
    На Хабре уже мануал написали как подготовиться к публикации в Xiaomi Store.

Подробнее в блоге Unity (анг.): https://blogs.unity3d.com/ru/2017/12/19/unity-2017-3-is-here/

20 декабря   unity   ссылки

Unity EventManager 2.0

Меня спрашивали про простой менеджер событий Unity, как передавать разные параметры и количество, а то строки неудобно. В общем-то, это был пример, но если кому-то оказалось нужно — то вот немного улучшенная версия:

using UnityEngine;
using UnityEngine.Events;
using System.Collections.Generic;
using System;

public class EventManager : MonoBehaviour {

    [Serializable]
    public class GameEvent : UnityEvent<object[]> { };

    private static EventManager _instance;
    private Dictionary<string, GameEvent> _eventDictionary;

    void Awake () {
        if (_instance != null)
            return;
        _instance = GetComponent<EventManager> ();
        if (_eventDictionary == null)
            _eventDictionary = new Dictionary<string, GameEvent> ();
    }

    /// <summary>Добавляем "слушателя" для события</summary>
    /// <param name="eventName">Название события</param>
    /// <param name="listener">Метод-обработчик события</param>
    public static void Subscribe (string eventName, UnityAction<object[]> listener) {
        GameEvent thisEvent;
        if (_instance._eventDictionary.TryGetValue (eventName, out thisEvent))
            thisEvent.AddListener (listener);
        else {
            thisEvent = new GameEvent ();
            thisEvent.AddListener (listener);
            _instance._eventDictionary.Add (eventName, thisEvent);
        }
    }

    /// <summary>Удаляем "слушателя" из списка</summary>
    /// <param name="eventName">Название события</param>
    /// <param name="listener">Метод-обработчик события</param>
    public static void Unsubscribe (string eventName, UnityAction<object[]> listener) {
        if (_instance == null)
            return;
        GameEvent thisEvent;
        if (_instance._eventDictionary.TryGetValue (eventName, out thisEvent))
            thisEvent.RemoveListener (listener);
    }

    /// <summary>Отправить событие</summary>
    /// <param name="eventName">Название события</param>
    /// <param name="parameters">Параметр массив</param>
    public static void SendEvent (string eventName, params object[] parameters) {
        GameEvent thisEvent;
        if (_instance._eventDictionary.TryGetValue (eventName, out thisEvent)) {
            thisEvent.Invoke (parameters);
        }
    }
}

Теперь количество параметров динамическое и любого типа. Для простого взаимодействия, вполне работоспособно. Пример использования:

void OnEnable () {
	EventManager.Subscribe ("event_name", MyFunction);
}

void OnDisable () {
	EventManager.Unsubscribe ("event_name", MyFunction);
}

void MyFunction (object[] parameters) {
	Debug.Log (parameters.Length); // количество параметров -> 3 в примере
	Debug.Log (parameters[1]);        // выведет -> 1 
}

...

EventManager.SendEvent ("event_name", "param_string", 1, 2); // вызов события
1 декабря   unity   разработка   с#
Ранее Ctrl + ↓