Wednesday, 25 February 2015

Creating a better positioning system

In this post, I want to talk about the new positioning system, which is only one of the changes/features that found their way into Brick Inventions over the past weeks.

Developing the system

I've had concepts for redesigning the positioning system for several months now, as the old system was ok but also limited in many ways. Around a month ago, while I was improving several parts of the game, it became clear to me that the old positioning system was holding the game back. I compared it to an RPG - no matter how beautiful the environment might be, the game won't make fun if the character controls are terrible.

Therefore, I started to plan the new system, made detailed concepts of how it should work and how it could be established in Unity.

It turned out that creating the system I had planned was much more complicated as I anticipated. While it would be easy to create it if the blocks are lying still, it is far more complicated when they can have any possible rotation in 3d-space. It took me four approaches to get it done and it was one of the most frustrating things I've had to do for a long time. Nevertheless, it's (almost) finished now and I'm quite happy with it.

The map I used all the time to test if the system was working.

Old vs New

So what is the difference between the old system and the new one? In the old system, you could place blocks on top of others, drag them up/down along and rotate them around the vertical axis. In addition, you could choose between 3 rotations (normal, on the side and vertical) in the menu. This system allowed for many combinations but many things were practical or just not possible. Furthermore, the system could be annoying in cases where blocks didn't have the exact rotation.

The new system is heavily based on surface normals. This means that blocks can also be placed on uneven terrain (the rotation of the block is adjusted automatically), which enables me to create more interesting level designs. However, the main difference is that blocks can now be placed on each side of other blocks, regardless of their rotation. The system tries to adjust the transparent block to the rotation of the other block, while keeping the overall rotation (which was actually the difficult part to implement, as you cannot simply inherit the rotation - it would lead to unpredictable results). Furthermore, you can now choose to slide along the normal or the vertical axis.

What is also new: You will be able to attach a block to another (for example put a block on the side of a wall). That is the only piece that isn't finished yet as there have been some problems but I'm confident that it will be working soon.

 Placing the block on the side of another block.

In the next post, I will talk about other improvements and user feedback. This will also be the content of the next video, together with footage of the new positioning system.

Stay tuned :)

No comments:

Post a Comment