#блог

об играх, разработке и личном опыте

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

Турбо-страницы для Эгеи

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

Чтобы это исправить, нужно отредактировать шаблон RSS, он находится по такому пути:

your_site_root/system/default/rss/rss.tmpl.php

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

<?= '<?xml version="1.0" encoding="utf-8"?>' ?> 
<rss version="2.0">

<channel>

<title><?= htmlspecialchars ($content['title'], ENT_NOQUOTES, HSC_ENC); ?></title>
<link><?= $content['home_page_url'] ?></link>
<description></description>
<generator><?= $content['_e2_ua_string'] ?></generator>
<language>ru</language>
<yandex:analytics id="<YOUR_METRIKA_ID>" type="Yandex"></yandex:analytics>

<?php foreach ($content['items'] as $item) { ?>
<item turbo="true">
<title><?= htmlspecialchars ($item['title'], ENT_NOQUOTES, HSC_ENC); ?></title>
<guid isPermaLink="<?= $item['_rss_guid_is_permalink'] ?>"><?= $item['_rss_guid'] ?></guid>
<link><?= $item['url'] ?></link>
<comments><?= $item['url'] ?></comments>
<description><?= htmlspecialchars ($item['content_html'], ENT_NOQUOTES, HSC_ENC) ?></description>
<pubDate><?= $item['_date_published_rfc2822'] ?></pubDate>
<turbo:content><?= htmlspecialchars ($item['content_html'], ENT_NOQUOTES, HSC_ENC) ?></turbo:content>
<author><?= @$content['blog']['author'] ?></author>
</item>

<?php } ?>

</channel>
</rss>

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

23 ноября   блог

iPhone X & Edge Protection

С выходом iPhone X и отказом от физической кнопки Home, Apple доставила некоторые неудобства разработчикам. И хотя для нативных приложений всё прошло более-менее гладко (неадаптированные приложения просто получили черные рамки), то для других — пришлось делать оптимизацию.

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

Но почему-то в тестах на iPhone 7 с установленной iOS 11.1.1, приложение стало вести себя как-будто это iPhone X — на нижних и верхних гранях экрана перестал работать тач, точнее, он срабатывал, но некорректно. Видимо это баг iOS или Unity, пока не разобрался, но исправить надо было.


Оказывается, можно скрыть Home Indicator и включить т. н. Edge Protection. Это когда первый свайп показывает Home Indicator, а второй скрывает приложение. Пока из коробки Unity не умеет так делать, пишут что в одном из следующих обновлений добавят. Кто на старых версиях 5.5+ (как я), нужно патчить XCode проект. Как это сделать, я уже писал. Раз, два.

Чтобы включить Edge Protection нужно добавить пару строчек кода в два файла:

// UnityViewControllerBaseiOS.h
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures; 

// UnityViewControllerBaseiOS.mm
- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures
{
    return UIRectEdgeAll;
}

Ветка на форуме Unity
Статья на Medium

15 ноября   ios   iphone   разработка

Участь игр с «честным» рандомом

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

Это относится к карточным играм, где рандомно карты выдаются, игры с кубиками, игры где случайно выпадают предметы, сундуки и т. п. Игроки всегда будут недовольны настоящим рандомом, будут говорить и писать, что нечестно и подстроено, хотя на самом деле, всё наоборот.

И варианта тут два:

  1. Оставить всё как есть — ведь это честно! и правильно, со стороны разработчика
  2. Сделать «нечестный» рандом и настроить баланс

Хотя нет, один вариант — №2. Потому что в итоге, главная цель любой игры — дать удовольствие от игры играющему; выигрывает он, проигрывает — неважно.

Почитать на эту тему: https://gdcuffs.com/post/unfr-rndm/

Визуальное программирование в Unity

Для Unity уже давно существует ассет Playmaker, который позволяет создавать сценарии игры без написания кода. У него есть свои пользователи и их достаточно много. Я никогда не пользовался такими инструментами и думаю, что какой-либо более-менее серьезный проект невозможно сделать без написания кода.

Однако, для каких-то отдельных элементов и частей игры, такой подход вполне может сократить время разработки. Так недавно появился ещё один инструмент для визуального программирования, похожий на Blueprints из движка Unreal — Bolt.

Выглядит красиво, требует одну из последних версий Unity 2017.1.0 и говорят, работает быстро. Плагин функциональный и может:

  • два типа графов: как в Unreal Blueprints и конечные автоматы как в Playmaker
  • группировка, слои и зум
  • события, макросы, плагины
  • live-редактирование
  • поддержка всех типов
  • встроенная документация

Кроме того, судя по плану разработки — у этого инструмента будет много полезных и удобных функций. Ещё есть сравнительная таблица с другими визуальными редакторами.


А вот что касается использования визуальных средств для создания сложных шейдеров, то тут я «за» :) Таких инструментов много, цены на них приемлемые и результат достойный.

  1. Amplify Shader Editor
  2. Shader Forge
  3. Shader Weaver

Если хочется начать с чего-нибудь попроще и получить красивый результат, есть ассет Minimalist. Привет, Monument Valley!

Можно применять разные цвета на разные стороны объекта с одним материалом, использовать градиенты, есть встроенный редактор материалов, стоит недорого и есть версия Free.

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

Видео по вторникам #3

Да, ещё одно видео про ARKit.

Игра AMON — 3D пазл в дополненной реальности.

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

Игра платная, но сделана качественно. Любителям головоломок понравится.

31 октября   ar   видео   игры   ссылки

Стивен Возняк про Apple, игры и изобретения

Отличное интервью у Познера.
Оказывается игру Breakout придумал Возняк и Джобс отдал её Atari! На видео видно, как Стиву нравится про то что он рассказывает, как он всё придумывал и что в итоге получилось.

26 октября   видео   игры   личности

5 полезных ассетов и библиотек для Unity #2

1. Unity Loop Component [Ссылка]

Небольшая библиотека которая позволяет повесить хук на события Update, LateUpdate, FixedUpdate, OnRenderObject и другие.

2. UIEffect [Ссылка]

Коллекция эффектов для uGUI. Позволяет быстро добавить около десятка различных эффектов для интерфейса своей игры или приложения: размытие, пикселизация, сепия и т. д.

3. Расширение для MemoryProfiler [Ссылка]

Такое расширение для расширения, про которое я уже писал как-то :) Позволяет искать, фильтровать и выводить информацию в более удобном виде.

4. NaughtyAttributes [Ссылка]

Хорошее расширение для инспектора Unity. Позволяет добавить много удобных контролов: слайдеры, кнопки, выпадающие списки, валидаторы и ещё много чего. Рекомендую.

5. The Stack [Ссылка]

В завершении не ассет, а демка популярной игры Stack. Полезно для новичков, можно подглядеть как делаются такие простые, но в тоже время залипательные игры :)

25 октября   plugin   ассеты   ссылки

Автоподстановка полей в UI

Нашёл интересное решение, которое сохранит дорогое время разработки, взяв на себя рутинные операции по присвоению объектов со сцены полям класса. Как-то так.

Например: вы сделали новый объект интерфейса, создали для него класс, добавили соответствующие поля и потом ручками в инспекторе Unity присвоили текстовое поле к Text и кнопку к Button.

А если таких полей 10-15? И окошек столько же... Я думаю мысль понятна.

Вот как раз для таких дел этот скрипт и есть. Только делает он всё сам. Работает это так:

using UnityEngine;
using UnityEngine.UI;

public class DialogWindow : AutoReferencer<DialogWindow> {
   public Text DialogLabel;
   public Button ConfirmButton;
}
Главное, чтобы названия полей и имена объектов совпадали. И типы соответственно.

Ну и сам скрипт. Конечно, вряд ли есть возможность использовать его везде — всё-таки архитектура приложения у всех отличается, однако, полезность какая-то в нём есть.

using System.Linq;
using UnityEngine;

public class AutoReferencer<T> : MonoBehaviour where T : AutoReferencer<T> {

   #if UNITY_EDITOR
   // Этот метод вызывается один раз, когда мы добавляем компонент на объект
   protected new virtual void Reset()
   {
       // Магия рефлексии
       // Для каждого поля в классе/компоненте, мы ищем только пустые или null
       foreach (var field in typeof(T).GetFields().Where(field => field.GetValue(this) == null))
       {
           // Теперь ищем объект с таким же именем
           Transform obj;
           if (transform.name == field.Name)
           {
               obj = transform;
           }
           else
           {
               obj = transform.Find(field.Name); // Или нужно сделать рекурсию, чтобы пойти глубже по иерархии
           }

           // Если находим объект с таким же именем как и поле - пытаемся присвоить его к этому полю
           if (obj!=null)
           {
               field.SetValue(this, obj.GetComponent(field.FieldType));
           }
       }
   }
   #endif
}

Подглядел на The Knights of Unity ;)

20 октября   unity   интерфейс   разработка   с#

Видео по вторникам #2

Если вы ещё не видели — вторая часть видео полностью сделанного на Unity. Это реалтайм рендеринг!

17 октября   unity   видео

ARKit и Unity

ARKit от Apple сделал то, что не смог Google в своё время. Хотя все эти технологии уже несколько лет как известны и работают, Apple смогли всё это упаковать, выдать за инновацию (их!) и красиво продать — как обычно.

И я думаю, что будущее как раз за дополненной реальностью (AR), а не за виртуальной (VR). Потому что AR позволяет взаимодействовать с реальным миром: обучаться рисованию/медицине, управлять каким-нибудь девайсом, делать путешествия и экскурсии более интерактивными, и т. д.


Чтобы проверить ARKit на Unity, потестить демки и сделать что-то своё, вам потребуется:

  • iPhone 6S+ с iOS 11
  • Unity 5.6+
  • плагин ARKit
  • скорее всего обновить XCode, потому что старый не даст запустить приложение на iOS 11

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

Ну и несколько видео, что можно сделать с помощью ARKit.

29 сентября   ar   ios   unity   ссылки
Ранее Ctrl + ↓