Избранное

Все заметки

Рассылка

GitHub icon Github

Buffer icon Проекты

Обо мне

9 заметок с тегом

графика

 Нет комментариев    56   2 мес   графика   интерфейс   ссылки

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

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

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

Ссылка на Github

 Нет комментариев    74   5 мес   unity   графика   разработка   с#

Favicon generator

Если вам когда-нибудь придётся делать favicon для сайта, рекомендую воспользоваться Favicon generator. Собственно он и гуглится первым :) Количество «настроек» впечатляет.

Версии для iOS Web Clip, Android Chrome, Windows Metro (orly?), различные режимы сжатия, прозрачности и прочее. Всё это скачивается одним архивом и работает во всех браузерах.

 1 комментарий    24   9 мес   браузер   графика   инструменты   ссылки

Unity blur effect и 2 камеры

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

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

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

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

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

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

Исходник на Github

 Нет комментариев    154   2018   camera   git   unity   графика   разработка

О Texture2D и памяти

Если погуглить на тему Unity Texture2D, memory leak, www.texture — то можно обнаружить кучу постов с вопросами о том, почему не освобождается память. И это на на самом деле так, если ничего не предпринимать.

Намучившись со всем этим, составил небольшой список мыслей/советов:

  • Создавайте, как можно меньше Texture2D, в идеале использовать пул. И обязательно делать Destroy, когда объект уже не будет использоваться, иначе память не освободится.
  • При использовании класса WWW, также нужно удалять www.texture и делать www.Dispose.
  • Сжатие «на лету» не работает, т. е. если вы например загружаете изображение из интеренетов и потом вставляете в Image, способом ниже, то на мобильном устройстве, картинка полностью развернется в память, без сжатия. И это печально.
// data is downloaded byte[]
...
Texture2D texture = null;
#if UNITY_ANDROID
	texture = new Texture2D(2, 2, TextureFormat.ETC2_RGBA8, false);
#elif UNITY_IOS
	texture = new Texture2D(2, 2, TextureFormat.PVRTC_RGBA4, false);
#endif
texture.LoadImage(data); 
Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f)));
MyImage.sprite = sprite;
  • Используйте сжатие предназначенное под конкретную платформу. Для iOS — это PVRTC4, для новых моделей подойдёт ASTC, начиная с iPhone 6. Для Android — ETC. Подробнее про это можно прочитать в мануале Unity.
  • Кроме того, сжатие не будет работать в некоторых случаях, если размеры спрайтов и атласов не равны степени 2. Т. е. размеры должны быть 128x128, 2048x2048 и т. д.
 Нет комментариев    74   2017   unity   графика   разработка

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

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

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

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

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

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

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

 2 комментария    436   2016   unity   графика   интерфейс   ссылки

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

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

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

Исходник на Github

 Нет комментариев    159   2016   unity   графика   разработка

2D графика для игр

Суперский блог про создание 2D графики для игр. Отличные видео и пошаговые уроки про то, как создать персонажа и подготовить его для анимации, как нарисовать камни и горы, фон и все остальное для вашей игры.

Если вы из тех, кто хочет сделать (и делает) игру полностью сам, то это то, что вам надо.

 Нет комментариев    442   2016   графика   игры   ссылки   уроки

Загрузка спрайтов в iOS

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

Для загрузки спрайта из внешнего файла, я использовал такую функцию:

public static Sprite LoadSprite (string folder, string image) {
	string path = string.Format ("{0}/{1}/{2}.png", Application.temporaryCachePath, folder, image);
	if (!System.IO.File.Exists (path))
		return null;
	else {
		byte[] data = System.IO.File.ReadAllBytes (path);
		Texture2D texture = new Texture2D(2, 2);
		texture.LoadImage(data); 
		return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f));
	}
}
...
MyIcon.sprite = LoadSprite ("loaded_images", "new_icon");

Ничего необычного — читаем файл в текстуру, из текстуры делаем спрайт и применяем его к картинке. Если запустить этот код в редакторе или на android устройстве, то все будет в порядке. Но запустив его на iPhone или iPad — спрайт загрузится некорректно. Это происходит потому iOS не поддерживает формат сжатия DXT. Нужно использовать PVRTC_RGBA4.

Поэтому, немного изменяем функцию и теперь все картинку будут показываться правильно:

public static Sprite LoadSprite (string folder, string image) {
	string path = string.Format ("{0}/{1}/{2}.png", Application.temporaryCachePath, folder, image);
	if (!System.IO.File.Exists (path))
		return null;
	else {
		byte[] data = System.IO.File.ReadAllBytes (path);
		Texture2D texture;
		#if UNITY_ANDROID 
			texture = new Texture2D(2, 2);
		#elif UNITY_IOS
			texture = new Texture2D(2, 2, TextureFormat.PVRTC_RGBA4, false);
		#endif
		texture.LoadImage(data); 
		return Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(.5f, .5f));
	}
}
 Нет комментариев    22   2016   ios   unity   графика