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

unity

Позднее Ctrl + ↑

Использование альфа маски

Обновлено 19.10.2018
Эта маска не работает внутри стандартной маски и RectMask2D :(

В Unity стандартная маска (компонент Mask) работает без альфа канала, т. е. красивые «мягкие» края сделать не получится. Особенно это актуально, если у вас маска сложной формы.

Но тут нас спасет очень хорошая библиотека скриптов от Simon Jackson — Unity UI Extensions. И один из скриптов из этой библиотеки как раз и позволяет делать «soft smooth ui alpha mask».

Нужно скопировать в свой проект скрипт SoftMaskScript.cs и шейдер с таким же именем. И кинуть скрипт на UI Image.

Получим такой результат. Намного лучше чем стандартная маска.

Да и вообще, в этой либе много других интересных и полезных вещей, рекомендую.

Системы аналитики для Unity

Современные мобильные (да и не только мобильные) игры немыслимы без внутренней системы аналитики. Возможность отслеживать поведение пользователя, события, считать количество игроков онлайн, отлавливать специфические баги, строить воронки и когорты — все это и многое другое позволяют сделать системы аналитики.

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

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

Надо сказать, что основные метрики за которыми обычно следят (DAU, MAU, WAU, retention, ARPU, ARPPU и т. д.) есть у всех систем из списка. Отличаются они некоторыми специфическими функциями, ценой и удобством интерфейса, тут уже нужно попробовать все, чтобы определиться.

Flurry

Хорошая система аналитики, есть все необходимое, но немного тормозит на мой взгляд, нет функций для работы с пушами и не очень работа с воронками. Бесплатна.
Плагин для Unity можно скачать из Asset Store, правда придется заплатить $10.

Mixpanel

У Mixpanel как раз наоборот с воронками все в порядке. Но нет анализа источников трафика, у Flurry есть. Еще в Mixpanel можно сделать свою! метрику, указав как она должна считаться.
Как интегрировать в Unity написано в документации.

Google Analytics

Google считает и собирает большое количество параметров, у него отличное API и кроме того он бесплатен. Для новичков самое оно.
Плагин можно скачать с Github.

Localytics

Система похожа на Mixpanel и кое-где даже ее повторяет. Есть воронки, сегментация, пуши, для анализа трафика надо подключать сторонние сервисы.
Плагин также можно скачать с Github.

devtodev

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

GameAnalytics

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

deltaDNA

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

AppMetrica

Система мобильной аналитики от Яндекса. Запустилась недавно, но быстро наращивает фичи. Бесплатная. Также есть все необходимое для небольшого проекта. Как и Google есть API для построения собственных отчетов из неагрегированных данных.
Как настроить метрику для Unity.

Я «по-умолчанию» использую Google Analytics и еще какую-нибудь. Возможно это дело привычки, но GA мне нравится. А так конечно надо попробовать все, чтобы выбрать для себя по функциям и удобству. Тем более, у всех систем есть бесплатный период или live demo.

Рисование кривых в Unity

Как нарисовать линию в Unity? А как кривую Безье? Очень просто! В Unity уже есть достаточно продвинутый компонент LineRenderer, его то я и использовал в одном из своих проектов. После упаковки в один скрипт, я бы даже сказал — в одну функцию, получилось вот что:

Можно настраивать количество сегментов в линии (качество), начальный и конечный цвет, и конечно ширину.

Исходник на Github

Выполнение в главном потоке Unity

Обновлено 18.09.2017
Лучше использовать Dispatcher из UnityToolbag.

Как в Unity быстро запустить процедуру в основном потоке? Для таких вещей, у меня есть маленький скрипт Tasker.

using UnityEngine;
using System.Collections.Generic;

public delegate void Task ();

public class Tasker : MonoBehaviour {

	private static Tasker _instance;								
	private Queue<Task> _taskQueue = new Queue<Task> ();
	private object _queueLock = new object ();

	void Awake () {
		_instance = GetComponent<Tasker>();
	}
		
	void FixedUpdate () {
		lock (_queueLock) {
			if (_taskQueue.Count > 0)
				_taskQueue.Dequeue ()();
		}
	}

	public static void Run (Task newTask) {
		lock (_instance._queueLock) {
			if (_instance._taskQueue.Count < 100)
				_instance._taskQueue.Enqueue (newTask);
		}
	}
}

Чтобы запустить что-то в главном потоке, нужно вызвать функцию Run:

Tasker.Run (new Task (delegate {
// выполнение в главном потоке
}));

JSON в Unity

Отличная легкая библиотека для работы с JSON в C#. Раньше использовал SimpleJSON, как и многие наверно, но эта оказалась проще и удобнее. Рекомендую.

https://github.com/AngelQuirogaM/NiceJson

 Нет комментариев    697   2016   unity   ссылки

Блоги про Unity

Этот список будет постоянно обновляться
Обновлено 17 октября 2016

Список более-менее обновляющихся блогов, сайтов, каналов на Youtube посвященных Unity, не модели-звуки-спрайты-текстуры, а уроки, статьи и заметки. Если вы знаете интересный ресурс про Unity пишите на mail@mopsicus.ru или в комменты.

На английском
http://www.unitygeek.com/
https://www.raywenderlich.com/category/unity
http://blog.theknightsofunity.com
http://www.completeunitydeveloper.com/blog
https://www.reddit.com/r/Unity3D/
http://barankahyaoglu.com/dev/
http://coffeebreakcodes.com
http://unityready.com
https://www.youtube.com/playlist?list=PLb34wPRpZdVfnN8jKtL9uqs6YSiPybBTV
http://noobtuts.com/unity

На русском
http://www.gamedev.ru/tags/Unity
https://habrahabr.ru/search/?q=unity3d
http://unity3d.ru/distribution/index.php
https://www.youtube.com/playlist?list=PLFRHm3BH1UqOGx23fUfw-T8-uPLZLUPMC
https://vk.com/unity_engine
https://www.youtube.com/playlist?list=PLD1B2C1D095B583B7
http://null-code.ru

 Нет комментариев    305   2016   unity   ссылки

Бесконечный скроллинг в Unity

Обновлено 07.09.2018
Теперь можно использовать ячейки разной высоты!
Добавил новые демки

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

Для одного проекта понадобилось сделать списки друзей и лидеров. Количество пользователей сотни тысяч. Естественно, создавать такое количество ячеек было бы неверно. Быстрый поиск показал несколько рабочих вариантов, но после тестов на реальных устройствах, при быстрых прокрутках лаги все равно были заметны и еще по ряду причин не подошли. Последний найденый вариант лег в основу и после доработок, отлично функционирует.

Была сделана такая знакомая мобильным разработчикам функция, как pull-to-refresh, также, ячейки можно настраивать как угодно под ваш проект, нужное количество создается автоматически в зависимости от высоты экрана. Единственное ограничение — высота ячейки не динамическая.

Использовать очень легко — все делает один скрипт, вещаем его на Scrollview настраиваем параметры и коллбеки и все. Демо есть. Если будут какие-то вопросы и пожелания, не стесняйтесь писать. Удачи!

Ссылка на Github

Применение материала к нескольким объектам

На самом деле, заголовок не полностью отображает возможности этого скрипта — изменять можно не только материал, а вообще производить над объектами какие-либо манипуляции: изменение параметров, добавление компонентов, и т. д. Нужно лишь немного изменить код.

Суть в том, что когда сцена построена, а вам необходимо применить изменения к 30 объектам (или больше), то это может занять время. Конечно, нужно обязательно все делать через префабы, чтобы такие случаи свести к минимуму, но все же, ситуации бывают разные.

using UnityEngine;
using System;
using UnityEditor;
using UnityEngine.UI;
 
public class AssignMaterial : ScriptableWizard {
    public bool isRecursively =  true;
    public Material material;
    string label = "Select Game Objects";
    GameObject[] objects;
   
    void OnWizardUpdate () {
        helpString = label;
        isValid = (material != null);
    }
   
    void OnWizardCreate () {
        objects = Selection.gameObjects;
        foreach (GameObject go in objects){
            changeMaterial(go);
        }
    }
 
    void changeMaterial (GameObject go) {
        if (go.GetComponent<YOUR_COMPONENT> ()) {
            go.GetComponent< YOUR_COMPONENT> ().material = material;
        }
        if (isRecursively) {
            for (int i = 0; i < go.transform.childCount; i++) {
                changeMaterial(go.transform.GetChild(i).gameObject);
            }
        }
    }
 
    [MenuItem ("Custom/Assign Material", false, 4)]
    static void assignMaterial () {
        ScriptableWizard.DisplayWizard ("Assign Material", typeof(AssignMaterial), "Assign");
    }
}

Создав такой скрипт и положив его в папку Editor вы создадите свой пункт в главном меню Unity. Выбираете Custom → Assign Material и появляется окно применения материала. Выбираете нужный материал, а на сцене объекты к которым его применить и жмете Assign. Готово.

В данном примере, я применял новый материал к компоненту Image.

Структура Unity проекта

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

Можно гуглить «best practices» и смотреть как делают другие, но все равно вы придёте к своему комфортному расположению ресурсов и элементов на сцене. А для тех, кто еще не определился с выбором, предлагаю свой вариант.

И так, структура папок:

  • Editor
  • Audio
    • Music
    • Effects
  • Models
  • Plugins
    • iOS
    • Android
  • Prefabs
  • Resources
    • Prefabs
    • Sprites
    • Etc
  • Textures
  • Animations
  • Scenes
    • Levels
    • Menu
    • Etc
  • Scripts
  • Shaders
  • Vendor

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

Структура сцены:

  • Plugins
  • Scripts
  • Level
  • UI
  • Render
    • Cameras
    • Lights
    • Effects
  • !Temporary

Scripts служит для скриптов которые не связаны с объектами, например, менеджер звуков. Plugins нужен если обрабатываете входящие сообщения из плагинов iOS и Android. В !Temporary добавляются динамические, временные элементы созданные в процессе игры. Если вы делаете 2D игру, то в Level разумно было бы добавить разбивку по «слоям»: background, middleground, foreground.

Пробуйте, создавайте! Все придет с опытом. В любом случае, такой шаблон удобнее и практичнее, чем куча файлов в корневой папке и раскиданные элементы по сцене :)

 1 комментарий    1782   2016   unity   разработка
Ранее Ctrl + ↓