Unity3d: Передача информации между сценами, WWW запросы

Screenshot 2014-04-07 08.03.36

Привет всем!

В этом посте я опишу свои новые познания в Unity3d.

WWW запросы

Отправку запрос к серверу я привязал к клику по объекту с компонентом *Collider(в моем случае это был SphereCollider).

Скрипт на C# выглядит так:

<code>IEnumerator OnMouseUp(){
    Debug.Log("Clicked Text");
    string url = "http://kpavlovsky.pro/u.php";
    WWW www = new WWW(url);
    yield return www;
    Debug.Log (www.text);
    GlobalData.RequestedData = www.text;
}
</code>

Этот код обрщается к серверу new WWW(url), ждет выполнения запроса yield return www, а потом сохраняет полученный текст в статичную переменную статичного класса GlobalData.RequestedData = www.text.

Передача данных между сценами в Unity3d

Общая информация между несколькими сценами может быть полезна для сохранения информации о персонаже при переходе между сценами. Например, первое окно – это login-screen, на котором мы проверяем логопассы пользователя, если всё ок, то получаем данные персонажа и переходим в сцену с игрой.

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

<code>public static class GlobalData
{
    public static string RequestedData;
}
</code>

Как это выглядит можно посмотреть здесь: http://kpavlovsky.pro/unity/sharing-data-across-scenes/run/run.html На первой сцене нажимаем на куб справа, потом на планету, на второй сцене увидем название этого сайта: оно получено с сервера в первой сцене.

Исходник проекта лежит тут: http://kpavlovsky.pro/unity/sharing-data-across-scenes/sharing-data-across-scenes.unitypackage

Буду рад комментариями и советам: у кого что не получилось, как можно сделать оптимальнее. Спасибо!

Браузерка или полностью на юнити?

Игре нужна будет цепляющая и неотпускающая система боя.
С одной стороны я хотел сделать браузерку. С другой стороны без юнити не сделать красивой и интересной системы боя.
Так раз всё равно с юнити работать, может полностью игру на ней сделать?
Тогда можно удовлетворить спрос пользователей мобильных устройств.

Тогда можно по-другому решить вопрос с игроками среди офисного планктона – нам не придется бороться с офисными проксями и вебсокетами. У нас буду смартфоны и планшеты с 3г, а то и 4г. Хотя пока я игру напишу может 4.5г появится. Или еще на пол Г больше :-)

Короче, пока я пробую с юнити реализовать базовый функционал по авторизации и получению информации о персонаже и серверную часть на node.js.

И конечно я не исключаю игру через браузер. Просто придется поставить юнити плагин для запуска игры. В офисе это может не прокатить из-за ограничений прав пользователей.

Типовая жалоба туриста

Это настолько прекрасно, что я решил это сохранить в блоге

ТИПОВАЯ ЖАЛОБА ТУРИСТА

Мы отдыхали в этом отеле уже в 23-й раз и опять разочарование.

Сразу скажу отель так себе. Смело вместо 5 звезд можно ставить минус 12. Территория огромная, за день не обойдешь. Устали. Номер дали небольшой, всего 68 метров на троих человек. В номере метровая плазма, джакузи, терраса, но не было павлинов и гепардов, а я очень люблю павлинов и гепардов. К тому же после удара ногой моего пьяного мужа о кран, он дал течь, а дверца у тумбочки отвалилась, когда мы на нее решили поставить кровать. А после того как мы в кондиционер бросили стул, он стал шуметь. Попросили переселить. Дали номер ближе к морю – холодно. Опять попросили о смене номера, поселили рядом с бассейном – жарко. Каждый день мы меняли номера, устали, это очень выматывает. Стоит отметить, что мебель в номерах не антикварная, а вода из унитаза невкусная. Море мутноватое, особенно возле берега, особенно когда заходишь в воду и шевелишь ногой по дну. Минусы – можно наступить на камушки и песок. Вода не очень прозрачная, особенно когда в нее… желтая какая-то. И вообще оно далековато было, попросили пододвинуть море чуть ближе к нашему номеру, реакции ноль.

Кормили прямо скажем без изысков. Было 15 видов мяса, 20 видов рыбы, пироженные-мороженные, работали рестораны, но не было чего-то эдакого. Я даже не знаю чего конкретно. В мексиканском ресторане еда острая. И представлены не все фрукты мира. Посуда без вензелей королевских домов. И персонал не вытирал мне рот платочком. Это минус.

Номер убирали плохо. Только один раз в день. И из полотенец делали лебедей с цветочками, а я хотела дворец Шахерезады. Мы специально спрятали монетку под шкаф, так представляете, уборщик ее так и не нашел. Нашему возмущению не было предела.

В коридорах плохая акустика и нет оригинальных картин Шишкина.

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

Анимация в отеле слабая, нас не зацепило. Тогда когда я хотела плакать, на сцене выступал клоун, когда хотела смеяться, кто-то на сцене пел. И не было фейерверка как на открытие олимпиады. Это минус. Развлечений ноль, фонарей не побить, от ментов не по убегать, даже элементарного концерта Стинга не было.

На мою просьбу расширить бассейн хотя бы на 30 метров, а горку поднять градусов на 40, администрация отеля не отреагировала никак. Вообще вода в бассейне мокрая, пластмассовые лежаки слишком уж пластмассовые, у деревянных нам не понравилась порода дерева.

На пляже грязно, за мной не успевали подбирать окурки, семечки, бумажки, поэтому грязно. И еще один минус — теснота. Я прям, видела в бинокль, как мужчина одевает очки, а это стесняет мое личное пространство.

Мы взяли с собой фотоаппарат, но что-то сфотографировать мы так и НЕ НАШЛИ.

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

Мы вообще не привередливые, но мне кажется все вышеперечисленное, элементарные вещи.

И напоследок, в самолете было слишком высоко.

С уважением,

жительница совхоза Запудрищенск, Клава Бутылкина.

Игра: PrestaShop, Ajax, Чат

Ну какая игра без чата? Чат это сердце интерфейса. Чат это способ общения между игроками. Чат это лог событий и уведомлений пользователю.
Без чата никак.
Только вот, чтобы его сделать, нужно отказаться от перезагрузки всей страницы при переходе между страницами. Иначе огромные лишние издержки при обработке запросов и бешеный лишний трафик у клиента в браузере. Зачем это нужно?

Обычно все игры используют фреймовую структуру для реализации использования чата. я вот не хочу так. Я вообще не люблю фреймы.
Вместо фреймов я решил сделать переходы между страницами престашопа аяксовыми.
Фокус в том, что в престе, в её стандартном шаблоне центральная колонка имеет селектор div#center_column
Поэтому я повесил обработчик кликов на все ссылки кроме .noajax ( a:not(.noajax) ) который блокирует переход по ссылке e.preventDefault(); и отправляет аякс запрос по href ссылке, и загружает в div#center_column текущей страницы, div#center_column из полученного ответа. Вот так:
jQuery(‘div#center_column’).load(e.currentTarget.href + ‘ div#center_column’);

Остается повесить на ссылках страницы авторизации класс .noajax и радоваться. Кроме того, я повесил индикатор загрузки, который появляется при выполнении ajax запроса, связанного с переходом между страницами.

В планах: использовать модальные окна для страниц с описанием игровых вещей.

Что до чата, я буду использовать jquery ui tabs https://jqueryui.com/tabs/

Сделаю фиксированный блок снизу страницы, который контент не будет загораживать.

Кроме того в планах карты с локациями. Это будет на мой взгляд интересный эксперимент. Скоро увидите, что получилось.

Игра

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

Я всегда восхищался проектами combats.ru, ganjawars.ru и массой других и хотел сделать аналогичный. Восхищался я именно с точки зрения сотворения этого. Я не беру в расчет реализацию, графику и все прочее.

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

До толкового прототипа доходило лишь один раз, когда с коллегой решили сделать что-то вроде порта Дюны II в браузере.
Эта попытка ушла дальше всех. Было поле по которому ходили скопированные из Дюны человечки и машинки(да-да – человечки, те самые несколько пикселей, выстроенные вертикально и еще один, появляющийся сбоку, символизирующий ходьбу).

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

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

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

Теперь дальше. Что брать за техническую основу? Я за последние 2 года я перепробовал массу пхпшных фреймворков и от всех у меня осталось весьма гадкое ощущение избыточности и замороченности. После django – это все полный ужас.
В связи с тем, что я на питоне в силу специфики своей работы (и большого объема работы) не писал уже давно, то попытка вернуться к разработке на django оказалась не столь эффективной. А поскольку время – самый ценный ресурс, то MVP решил запустить на том, что лучше всего знаю на данный момент.

Как я выбирал подходящее решение?
Чтобы ответить на этот вопрос, надо задать еще несколько вопросов. Вернее, упомянуть какие вопросы я себе задавал, когда опеределял что нужно реализовывать в игре.
Перечислю:
* авторизация/регистрация
* движок с поддержкой зоны контента, сайдбаров и сопутствующей ерунды
* Какой-то встроенный механизм работы с БД (mysql)
* То что я уже знаю или до чего доучиваться надо как можно меньше
* Что-то что оставит мне только необходимость реализации именно игровой механики, а не работы над саппортными задачами вроде написания фреймворка или формочек с регистрацией
* Что-то на чем я очень быстро получу базу игровых вещей с каталогом, картинками, описанием, характеристиками
* что-то с хуками(слотами, событиями,сигналами — кому как удобнее).

Какие были варианты? Пересекая с тем, с чем я хоть немного знаком это: wordpress, joomla и то с чем я сейчас активно работаю – PrestaShop!
Бредовый выбор? Нестандартное использование!

Преста, как оказалось как нельзя лучше подходит для создания MVP браузерной многопользовательской игры.
Смотрите:
* Каталог товаров – это каталог всех вещей в игре. Отключив процесс покупки, я получил удобный каталог в котором как раз есть и свойства, и описания, и картинки
* Регистрация/авторизация – конечно же в интернет-магазинной CMS это всё есть
* Функции CMS: зона контента, сайдбары, футеры,хедеры и это все легко допилить с помощью
* Хуков! Их предостаточно и можно создать свои – по «долгу службы» я это делаю почти каждый день и уже почти с закрытыми глазами знаю «куда ткнуть отверткой»
* Конечно же для всего этого есть административный интерфейс, который тоже можно расширить с помощью хуков и админских контроллеров.

Итого. От момента прихода в голову идеи прошло 2 дня. А если учитывать время, которое я могу выделить на хобби — прошло короткое утро( преимущественно в фиксировании идей в еверноуте и 2 недолгих вечера).
Сейчас игра позволяет: зарегистрироваться, купить на стартовые деньги оружие и устроиться работать на одну из фабрик по производству оружия или экипировки.
Разработка заняла максимум 3 часа из которых час-полтора я залипал на каталог американского сайта с оружием и копировал оттуда картинки, названия и цены на пистолеты, заполняя этим базу игровых вещей.

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

А еще, я планирую сделать интересную экономическую модель. Поэтому вчерашний вечер я провел за чтением статьей на тему того как работает валютный рынок, как устроены биржи акций и валют и так далее. К слову – это помогло закрыть некоторые пробелы в знаниях и терминах. Так что польза определенно есть от такого хобби :-)

Следите за новостями – скоро выложу игру в открытый доступ и буду писать сюда о внедрениях новых фишек, о проблемах с которыми сталкиваюсь и о мыслях и идеях, касательно дальнейшего развития игры.

Useful #1: Декабрьский выпуск

Интересные ссылки:

Если ssh-соединение отваливается после пары минут без активности…

У меня часто бывает так. Зайдешь на сервер по ssh, потом переключишься в браузер, а по возвращению обратно минут через 5-10 консоль отвалилась.

Избежать этого можно создав файл ~/.ssh/config

В него следует дописать эти настройки:

ServerAliveInterval 300
ServerAliveCountMax 36

Значение ServerAliveInterval устанавливает время в секундах между отправкой на сервер пакетов для поддержания соединения. В данном случае – 5 минут.
Значение ServerAliveCountMax устанавливает количество таких пакетов отправляемых на сервер. При данных настройках соединение будет поддерживаться в течение трех часов.

 

Кнопка Insert в терминале iTerm2 на MacOSX

На клавиатуре Мака не хватает кнопки Insert, которая часто нужна при работе в mc и других консольных программах.

Решение:

  • освободить или найти не используемую кнопку на клавиатуре
  • назначить её на отправку нужной Escape-последовательности в iTerm2

1. Освобождаем F12

По-умолчанию, данная кнопка используется для открытия Dashboard в маке. Мне он не нужен.

Открываем System Preferences

System Preferences

System Preferences

Переходим в настройки клавиатуры (Keyboard)

Настройки клавиатуры в Mac OS X

Настройки клавиатуры в Mac OS X

Находим Show Dashboard в списке Mission Control и снимаем галочку или назначаем другое сочетание.

Отключаем Show Dashboard в списке Mission Control

Отключаем Show Dashboard в списке Mission Control

2. Настраиваем iTerm2

В iTerm2 открываем настройки ( CMD+, ) ->Keys и жмем плюсик под таблицей справа, для создания нового сокращения

Настройки клавиатурных сокращений в iTerm2

Настройки клавиатурных сокращений в iTerm2

Добавляем escape-последовательность на кнопку F12, вот эту:    [2~

Отправка Insert в iTerm2

Отправка Insert в iTerm2

Жмем OK, готово!

Работа кнопки Insert: Выделение файлов в Midnight Commander

Работа кнопки Insert: Выделение файлов в Midnight Commander

 

PrestaShop Theme Boilerplate Основа для создания своей темы

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

PrestaShop Theme Boilerplate

Это тема для PrestaShop содержащая только самое необходимое для работы магазина.
Код темы содержит множество коментариев, что помогает разобраться зачем тот или иной кусок кода нужен.

URL: https://github.com/heskethm/Prestashop-Theme-Boilerplate

Получение адреса по координатам с помощью API Яндекс.Карт

<?php
function addressByCoordinates($geocode)
{
    $params = array(
        'geocode' => $geocode, // адрес
        'format' => 'json', // формат ответа
           'results' => 1,                               // количество выводимых результатов
        //   'key'     => '...',                           // ваш api key
    );
    $response = json_decode(file_get_contents('http://geocode-maps.yandex.ru/1.x/?' . http_build_query($params, '', '&')));

    if (count($response->response->GeoObjectCollection->featureMember) > 0) {
        return $response->response->GeoObjectCollection->featureMember[0]->GeoObject->metaDataProperty->GeocoderMetaData->AddressDetails->Country->AddressLine;
    } else {
        return false;
    }
}

echo addressByCoordinates("37.509,55.78408");
?>