Fast Fox devlog #2: Game Update, Unity 5 Migration, Appodeal

Great news everone! We have updated our game in Google Play, please try it and tell us what you think:

Get it on Google Play

 

Hi, guys! This our second devlog of Fast Fox game.

Unity 5

We want to tell about the switching to Unity 5 and the issues we faced, an also some words about the Appodeal ad network.

Overall, the transition to Unity 5 was pretty smooth. Unity 5 automatically upgrades all scripts in you project when you open it for the first time. It allows to automatically adapt the scripts to new Unity 5 API. This is great solution from Unity, since adapting the scripts manually to new API format is very boring and confusing activity.

Smart upgrader was not able to fix 2 or 3 places in code. Unity have shown these places by warnings in console. As a result it was very easy to adapt these places manually.

Surprises appeared from another side. Suddenly it turned out that some colliders in the game have changed their location – we had to manually return them to its original position 🙂

Second issue we faced with was ‘Apply Root Motion’ param in Animator component. The meaning of this param have changed in Unity 5 to opposite (!) So we manually changed this param value in all game objects and prefabs. After this everything worked correctly.

Sprite Packer Fast Fox

The next great thing we found in Unity 5 is the Sprite Packer. Now it is freely available for all: both in pro and free versions of Unity. It is a great tool to automatically pack your sprites into texture atlases to optimize your game size and performance.

One more moment which we found interesting and decided to try – it is Appodeal ad provider. We used Google AdMob ad provider in previous version of the game and the eCPM was not very good. Appodeal promises to supply much better eCPM, so we decided to integrate it into our game.

appodeal-mobile-ad-revenue-booster-2-638

We’ll tell about the results with Appodeal and the integration process in feather posts. One thing we can say for sure – support in the face of their CTO Pavel Golubev – responds to email very quickly. And this is the first plus 🙂

We applied these changes in recent update. Don’t forget to download Fast Fox game in Google Play and review it 🙂

Get it on Google Play

Fast Fox devlog #1: Game Optimization, Texture Packer, Prefab Evolution

Hi all!

We decided that we should tell about everything that happens to us during the development of Fast Fox game 🙂 Better late than never, so we  started our devlog where we will talk about the things we are doing at the moment. After the Fast Fox release we received several reviews from users, which were unable to install the game because of low memory in the mobile device. After the release of Fast Fox game we got a few reviews of users who were not able to install the game due to lack of memory storage in the phone. This was especially actual for older devices with Android 2.3 on board. It was confirmed by the installation stats  – the percentage of installations on older versions of Android was very low. Also we found some performance issues at newer devices.
Fast Fox - downloads per OS version

After the last update the game eats about 80 MB of memory starage which is not very reasonable for such a small game.

Too much space eaten by Fast Fox

You should take into account the fact that the size of the apk uploaded to Google Play should not exceed 50 MB, otherwise it will be required to use APK Expansion Files technology. So we decided to avoid this situtation anyway and optimize the size of our game package. The game will grow with the new episodes, so it would become a real issue.

Who eats so much space? – asked we ourselves. We analyzed the build log in Unity and found the answer. The answer was very simple and predictable in advance. Our assets caused this, especially textures and sounds.

Sounds were optimized very quickly. We simply decreased the sound quality, so we won about 10MB.

The second issue is the size of graphical assets. We didn’t use the texture atlases in our game, so it was a noticable impact on the disk space occupied by our graphical assets and on the game performance.

For a long time to explain what a texture atlas is and why it is needed, simply watch this funny video:

https://www.codeandweb.com/what-is-a-sprite-sheet.

Guys from Codeandweb build an excellant tool named  TexturePacker for the automation of texture atlases creation. Also this tool integrates into Unity Editor very well with the help of plugin from Asset Store.

So we decided to use it in our project. But it was not so easy as we expected …

When you pack the texture into atlas using TexturePacker the name of the texture is changed. So Unity thinks that this is the new texture and cannot seamlessly use it instead of old one.  So to use the texture you need to walk through all the places there the texture was used and replace it with the one from atlas. This way was very dreary and irrational.

“Use the prefabs, Luke!” – you can say and will be absolutely right.  For those who are not familiar with the ‘prefab’ concept in Unity: prefab it the template of game object. Using this template tou can create as much game obects in the scene as you want. Changing the properties of prefab the properties of game objects created using this prefab are also changed (with some limitations).

It is not so much prefabs in the game, so replacing the textures would be an easy task. But so much game objects were not linked with the prefabs in our game (facepalm!).

“We should link game objects with the prefabs” – we decided and rushed into the fight. It would be great to have an adequate prefab hierarchy. It would make our life easier and allow to add and change existing entities in the game by simple way.

Before it started we immediately ran into the problem of nested prefabs (see http://stackoverflow.com/questions/18768013/what-is-a-nested-prefab).

We can briefly describe this issue by example:

You have a wheel prefab and a car prefab in your game. Car prefab contains 4 wheel prefabs. You decided to change wheel prefab and make the square wheel. It would be logical to assume that wheels in car prefab also become square. But no, Unity dosn’t think so. You need to make game object by car prefab, change the old wheels to square wheels and apply these changes in car prefab.

Such behavior drives usinti stupor. Unity developers promise to solve this issue since 2012, but iit is still not solved. So how to make really huge game projects using Unity???

We studied this issue on Unity forums and after the digging in Asset Store found a great solution – Prefab Evolution plugin. This plugin gracefully solves an issue with nested prefabs and also adds an ability for prefab inheritance.

Currently we link our game objects with prefabs using Prefab Evolution. Next step is to apply texture atlases, so it will optimize the size of our game and increase performance!

Prefab Evolution

We’ll tell about results in the next posts! 🙂

Fast Fox devlog #2: Unity 5, Appodeal

В нашем втором devlog’e мы хотели бы рассказать о переходе на Unity 5 и о тех неожиданностях, с которыми мы столкнулись, а также пару строк о рекламном провайдере Appodeal.

Unity 5

В целом переход на Unity 5 прошел довольно гладко. Unity 5 при запуске старого проекта, созданного в предыдущей версии Unity автоматически апгрейдит все скрипты в случае если произошли изменения Unity API. Это очень правильное решение со стороны Unity, поскольку изменять вручную все скрипты под новые форматы API вызовов – это та еще морока. Умный апгрейдер не смог изменить все места – Unity показала эти места warnning’ами в консоле. В итоге достаточно быстро удалось адаптировать эти места вручную.

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

Второй момент – это параметр Apply Root Motion в компоненте Animator, который внезапно стал иметь противоположное значение. Также пришлось вручную пробежаться по всем объектам и префабам и снять этот флажок. После этого анимации многих объектов заработали правильно.

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

appodeal-mobile-ad-revenue-booster-2-638

О результатах работы с Appodeal и об особенностях интеграции напишем отдельный пост через некоторое время. Одно сейчас можно сказать точно – служба поддержки в лице их CTO Павла Голубева – отвечает на письма очень быстро. А это первый плюс 🙂

Fast Fox devlog #1: Оптимизация игры, Texture Packer, Prefab Evolution

Всем привет!
Мы решили, что стоит рассказывать обо всем, что происходит у нас во время разработки игры Fast Fox 🙂 Лучше поздно чем никогда, поэтому мы начинаем вести дневник разработки и рассказывать о том чем мы занимаемся в данный момент. После релиза игры мы получили несколько отзывов пользователей, которые не смогли установить игру из-за нехватки места в памяти телефона. Это было особенно актуально для старых устройств с версией Android 2.3. Статистика установок это подтверждала – практически не было установок игры на старых версиях Android. К тому же и на относительно новых устройствах у игры были проблемы с производительностью.
Fast Fox - downloads per OS version

После выпуска последнего обновления игра занимала на устройстве неразумно много места – больше 80 МБ.

Too much space eaten by Fast Fox

При загрузке в Google Play нужно учитывать, что размер пакета приложения не должен превышать 50 МБ, иначе придется использовать технологию APK Expansion Files, чего очень не хотелось. Поняв, что с выпуском новых эпизодов размер будет только расти, мы решили взяться за эту проблему.

Что же занимает так много места? Проанализировав лог сборки в Unity мы нашли ответ. Ответ был на удивление прост и заранее предсказуем – наши ассеты, а именно – текстуры и звуки – съедают львиную долю места.

С оптимизацией звуков мы справились очень быстро – уменьшили качество звуков файлов, что дало выигрыш порядка 10 МБ.

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

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

https://www.codeandweb.com/what-is-a-sprite-sheet.

Ребята из codeandweb сделали отличный инструмент под названием TexturePacker для автоматизации создания текстурных атласов, к тому же с помощью плагина он очень легко интегрируется в Unity 🙂

Его то мы и решили использовать. Но всё оказалось не так просто…

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

“Есть же префабы!” – скажете вы и будете абсолютно правы. Для тех, кто не знаком с этим понятием в Unity – префаб – это шаблон игрового объекта. Используя этот шаблон вы можете создать сколько угодно игровых объектов на сцене. Изменяя свойства префаба меняются и свойства всех игровых объектов, созданных по этому префабу (с определенными ограничениями).

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

“Надо привязать!” – решили мы и ринулись в бой. Было бы очень здорово иметь адекватную иерархию префабов, что в дальнейшем бы упростило нам добавление новых и изменение существующих сущностей в игре.

Не успев начать мы сразу же натолкнулись на проблему вложенных префабов, которой завалены все форумы Unity и Stackoverflow (http://stackoverflow.com/questions/18768013/what-is-a-nested-prefab).

Кратко эту проблему можно описать на примере:

У вас в игре есть префаб колеса и у есть префаб машины, который содержит в себе 4 префаба колеса. Вы решили изменить префаб колеса и сделать его квадратным. Логично было бы предположить, что в префабе машины колеса также станут квадратными. А нет, Unity думает не так, вам нужно будет сначала создать игровой объект по префабу машины, поменять в ней колеса на квадратные и применить эти изменения в префабе машины.

Многих как и нас такое поведение вгоняет в ступор. А разработчики Unity уже который год обещают решить эту проблему. (Интересно как живется тем, кто разрабатывает действительно объемные проекты на Unity?)

Поизучав эту проблему на форумах Unity и покопавшись в Asset Store, мы нашли решение – это плагин Prefab Evolution. Он изящно решает проблему вложенных префабов, а так же добавляет возможность гибкого наследования.

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

О результатах в следующем посте 🙂

Monsters returned

Monsters returned!

We have updated our game “Monster Crush Saga” to version 1.1:

– Improved controls: use swipes instad of taps to swap monsters

– Updates in visual style

Play “Monster Crush Saga” now:


Get it on Google Play

Monster Puzzle Saga is Available on Google Play!

In the dark of night angry bear decided to grab a honey from the monster village.

The whole village was in sweet dream and no one suspected about the loss. Only young forest dwellers saw the bear dragging honey in his secret cave. And they went after him.

What will happen next? Will they return the stolen?
Help our bear to cope with small pranksters!

Monster Puzzle Saga is FREE and so addictive!
Play new colorful game Monster Puzzle Saga now:

Get it on Google Play

Coming on iOS and Tizen soon!
Follow us on Twitter to get updates!  

startgameplay

Monster Puzzle Saga coming soon!

Adverisment

New app coming soon! On Play.Google.com!

Hello world!

2ae1lVC3DxY

Hello world! Hello world! Hello world! Hello world! Hello world!

 

Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!

Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!Hello world!м

Hello world!Hello world!Hello world!Hello world!Hello world!

 

 

Hello world!