Запуск игры под Windows Phone 8


    Я предыдущих статьях я рассказывал, как мы запускали игру на Google Play и в социальных сетях. Следующей платформой должна была стать iOS, но опять возникли заминки и было принято решение опробовать пока Windows Phone 8. На портирование игры ушло несколько недель, и еще столько же на одобрение в маркете. В статье я расскажу, что мы проделали и что из этого вышло.

    Подготовка всего необходимого для разработки


    Первый делом, понадобился девайс на WP8, на котором можно было бы проводить тесты. Выбор пал на бюджетный Nokia Lumia 520 за 190$. Я никогда раньше не использовал эту ОС и не думал, что понравится, но поюзав телефон пару дней, понял, что все не так и плохо. Отсутствие свободы действий конечно печалит, но с другой стороны радует, что приложения на WP8 не подлежат взлому. Еще были переживания на счет мощности, думал будут лаги в играх – но нет, все работает быстро.
    Далее установил Windows 8.1. Поначалу долго плевался – программы вне рабочего стола запускать очень неудобно, да и отсутствие пуска пугало. Сильно выводила моя привычка периодически нажимать кнопку «windows» на клавиатуре. Если в предыдущих версиях открывалась панель пуска, то в восьмой версии перекидывает из рабочего стола на экран с квадратами в стиле метро. Напрягало.
    Очень порадовало, что Windows 8.1 и Visual Studio 2013 были бесплатны на протяжении многих дней и за это время я успел сделать все что надо.
    Чтоб приступить к разработке, не обязательно иметь аккаунт разработчика. Нужно только разлочить телефон через Windows Phone Developer Registration. После этого можно билдить приложение на девайс и тестировать.



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

    Особенности портирования игры на Unity3d под WP8


    Сборка под Windows Phone чем-то напоминает iOS. Сначала создается промежуточный проект, который открывается через VS 2013, а уже только потом можно сбилдить финальный *.xap файл.

    Для этой платформы не доступны многие библиотеки. Вот что у меня перестало работать:
    • System.Security.Cryptography.MD5CryptoServiceProvider. Шифрование через MD5, был найден альтернативный скрипт, который позволяет генерировать md5.
    • `System.Runtime.Serialization.SerializationInfo`. Десериализция через Json.FX перестала работать. В итоге пришлось по старинке через string.Split.

    Не обошлось и без багов. Подвеска у автомобиля перестала работать, колёса летали в воздухе. Оказалось, что WheelCollider.GetGroundHit криво работает, в итоге я переделал на Physics.Raycast.

    Немного неудобный переход по ссылкам. Стандартный метод Application.OpenURL() не подходит. Надо создавать специальный метод в решении VS, который потом будет вызываться по ивенту через Unity3d.

    Неприятно, что пока нет дебага, хотя говорят в версии Юнити 4.3 должен появиться.

    Также нужен пак из нескольких квадратных иконок разных размеров.

    Еще пришлось переделать несколько фич от СДК издателя. Мы от него полностью отказались для этой платформы. Рейтинг игроков был собран на php+mysql, а окошко «Rate me» пересобрали с новым интерфейсом и другой реализацией.

    Корректировка баланса и монетизации


    По сравнению с Android, для WP8 мы ужесточили баланс и ввели бензин, который расходуется с каждым заездом и постепенно восстанавливается. Подобная схема сейчас довольно популярна.
    В окне доната монеток мы скорректировали цены, минимальный платеж повысили до 2$, а максимальный – до 30$. Также для более крупных платежей, пишем сколько дополнительных монеток игрок получит относительного первого платежа в процентах.



    Внутриигровые покупки


    Игра фримиумная, потому пришлось разбираться с платежкой. Радует, что есть достаточно примеров, которые хорошо помогли понять, как все работает. Чтоб тестировать платежи, нужно заливать игру на маркет, но только как БЕТУ! Мы первый раз случайно закинули в релиз, в итоге долго ждали пока модераторы посмотрят сырую версию и отклонят игру. Потом перезалили в бету и игра стала доступна для теста течение дня. Вроде, еще можно развернуть виртуальную машину для обкатки платежки, но этот способ похоже куда сложнее. Товары делятся на две категории – Comsumable (расходники, монетки и т д) и Durable (открытие доп. контента и т д).
    Если делать самому лень, то на Asset Store есть готовые плагины для интеграции микроплатежей. Стоимость в районе 30$.

    Внутриигровая реклама


    Да, в игре есть реклама. Появляется она в окнах паузы и результатов, а также на экране локскрина. Я хотел вставить привычный admob, но его не было для WP8, в итоге пришлось вставлять рекламу от NAX (Nokia Ad Exchange). Проблем никаких не возникло, на хабре есть статья про внедрение этой сети. Кстати, после того как я внедрил NAX, вышел и SDK admob для WP8, но уже было поздно пересобирать проект.

    Залив игры в маркет


    Модерация жесткая и долгая, но весьма качественная. Очень сильно долбят за системную кнопку Back. В любых ситуациях, она должна работать. Мы несколько раз стопорились из-за этой кнопки. Удивило, что Microsoft работают хорошие тестеры. Присылают отчеты, как положено – в pdf-формате, четко расписывают как повторить баг, пишут, как должно быть, а как в игре. Молодцы.



    Печалит длительность проверки. Дорелизные проверки по 5 дней – это ок. Тут все нормально, но вот с послерелизными фиксами очень тяжко. Так вышло, что когда я исправлял баг с кнопкой back, то создал новый, который фризил (стопорил) игру в некоторых местах. Фикс сделал быстро, нужно было всего лишь в одном месте поменять значение переменной. Но в итоге, проверка заняла около 5 дней, в то время как игра очень активно набирала обороты. С моей точки зрения, это не очень правильно. Должна быть возможность ускорения заливки критических фиксов, а то за 5 дней игру можно «слить». Неприятная ситуация получилась. Вы, наверное скажете, что нужно сразу все делать как надо… Да, но не всегда так выходит.

    Пиар


    С раскруткой дело обстоит довольно приятно, она очень условная, т-к ресурсов очень мало. По идее, если купить обзор на 4pda, то отдача несомненно будет, учитывая, что Россия – большой рынок Windows Phone, но мы этого не делали. Вообще платных обзоров совсем не покупали. Издатель делал рассылку по своим каналам, после чего появились обзоры на игру, что тоже приятно. Также, Microsoft и Nokia, подтвердили, что нашу игру поставят в промо.
    В любом случае, я считаю, что за счет небольшой конкуренции, на этой платформе с раскруткой проблем быть не может.

    Релиз и статистика



    Игра быстро вышла в топ и повалило много скачек, даже больше чем на Android после релиза. Критический баг, который пробыл в маркете 7 дней, все подпортил, но надеюсь основная часть аудитории не утеряна.
    Закачек за первые 10 дней – 100к (на Android – 50к). ARPU тоже в два раза выше.

    Полезные ссылки


    Поделиться публикацией

    Комментарии 19

      +1
      Шифрование через MD5

      MD5 это механизм хеширования(контрольной суммы). Я то примерно понимаю как можно умудриться им шифровать, но…
      Опечатка?
        0
        Не опечатка. И так, и так правильно. У вас просто больше конкретики. У меня md5 используется для подписи запросов.

        Шифровать тоже можно, помню в раньше в старых движках IPB пароли шифровались именно так, и даже без «соли». Простые комбинации можно было перебором разгадывать. :)
          0
          У меня md5 используется для подписи запросов.

          Фух. А то я уже испугался)
          А шифровать можно не только пароли. Можно, но лучше не нужно )
          Берётся определённое значение счетчика и инкремент (не единица). Клепаем ряд нужной длинны и каждое полученное число хешируем MD5. Получаем гамму, которой можно ксорить текст. На другой стороне зная первоначальное значение счетчика и инкремент можно текст восстановить.
          И я, к сожалению, один раз такую реализацию видел.
        +1
        1. А сколько времени ушло на портирование?
        2. Почему не использовали сразу Json.Net — там же есть portable сборка?
          0
          1. В первом абзаце указал. ~2 недели где-то на впиливание всего функционала, а дальше была тянучка с проверками.
          2. У вас в Юнити оно работало и давало сбилдить проект? Если да, то учту на будущее. Я перепробовал много разных вариантов, заработал один скрипт — JSONObject.cs, но он очень неудобный. Данных немного, через .Split нормально вышло. )
            0
            1. Прошу прощения, пропустил.
            2. Да, оно вроде должно работать в Юнити.
          +1
          Если отвалился какой то критичный API ОС (то же шифрование например) можно быстро написать небольшой плагин c нужной функцией blogs.msdn.com/b/dmandreev/archive/2013/10/01/how-to-create-unity3d-winrt-plugin.aspx (в посте описано то как сделать для Windows 8 но для Windows Phone 8 все выглядит практически аналогично)
            +2
            Плиз, финансовый вопрос. Прибыль!
              0
              Не совсем понял зачем вы заморачивались с Json'ом если у WP8 есть встроенный сериализатор — DataContractJsonSerializer
                0
                К слову он очень тормознутый. Если данных немного и надо десериализовать редко — можно его использовать, но если данные идут потоком json объектов, то вы почувствуете разницу используя другие решения.
                0
                Насколько я помню, при деплоинге проекта в аппстор виндовс, есть пункт указания шифрования, если вы используете свое собственное — необходимо описать алгоритм. Поправьте, если неправ.
                  +1
                  А как писалось GUI? Можно ли использовать XAML разметку для главного меню? Если нет, то что использовалось: стандартное GUI юнити, NGUI etc.?
                    0
                    Интерфейс у меня на плашках (Plane). XAML можно использовать, пробовал собирать тестовые окна — работает, но обошелся без него.

                    OnGUI стараюсь не юзать, т-к нагрузка идёт ощутимая (смотрел по профайлеру). Только для ввода ника пришлось его использовать, и то после ввода я его уничтожаю, ведь даже пустой метод OnGUI() даёт нагрузку.

                    Скриншот игрового ГУИ
                    image
                    0
                    А как игра то называется?
                      0
                      Отвечу за автора — судя по картинке это Zombie Derby
                      0
                      косяк в игре есть, иногда машину начинает перевешивать вперёд(на любом холме заваливается носом и переворачивается), лечится перезапуском игры
                        0
                        Обучение проходили? Там акселеметр задействован. Подозреваю, что вы просто девайс немного наклонили потому и заваливается. )
                          0
                          даа так гораздо лучше стало (:
                        0
                        Если что, дебаг есть через плагин visualstudiogallery.msdn.microsoft.com/20b80b8c-659b-45ef-96c1-437828fe7cf2

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

                        Самое читаемое