Screenshots from a experiment with Unity, Configurable joints, Direct blend tree’s and a Korg MIDI Controller.
With the MIDI Controller I can control multiple Animator parameters (and other variables) at the same time, with real physical sliders!
Screenshot of the Tankmanious main menu scene version 1
Flipping UI canvas system
For the Tankmanious main menu screen I wanted to develop a UI system that uses Unity’s ‘world space’ canvas system, because I love the idea of information screens magically floating around having a position in 3D space instead of being flat and right in front of the ‘lens’. I also love the idea of a card that shows a different side every time it is being turned over, like some kind of four dimensional object.
The way that the system works is that on the exact amount of degrees of rotation around the Z-axis, where the flat side of the UI canvas points directly to the camera, it switches the front canvas to inactive and which ever back facing canvas that is needed by the button to active, like a magicians card trick!
The way that I found this to be relatively easy to set up was by using four animation clips for the four states; closed, half open, open and half closed. The clips only have two keyframes, one for the rotation, and one that sets the canvas to active or inactive. The smooth rotation is being done by the animator that transitions between the four states.
I’m very pleased with the way it works and how it looks, but I’m already working on a version two for the main menu screen because I want to create a more interesting background scene, and to be honest, I kind of stole the idea for this background composition.:)
Triangular shaped tank tracks created with the tank tracks system
To good to use
When I began working on Tankmanious I wanted the tanks in the game to have realistically moving tank tracks with individual track pieces, so I thought it would be interesting to create a tank track system. After doing some research on different kinds of approaches to realistic tank tracks I decided to go for a spline based system. For those of you who aren’t familiar with splines, think of the pen tool from Photoshop and Illustrator that you use to draw Bézier curves with. Curves can also be used in 3D space to create paths in 3D.
Curves are very useful in game-design for a lot of things. You can use them to create race tracks, enemy patrolling paths or train tracks for instance. You can also have objects follow those paths like a train follows it’s rails, which is also useful if you want a camera to follow a path trough space.
For the base of the system I used code to generate splines and to have an object move along that spline. Then I built the system on top of that.
The way that it works in Unity is that I generate a spline object and give it the shape that I want. After that I can simply add a prefab of a single track piece to the script in Unity and specify how many pieces the track should have and how much space there is between them. To have the tracks rotate forward I just set the speed to a positive value or negative to rotate backwards.
The system works great and I’m sure I can use it for a different game in the future but it was a little bit too good to use for a mobile game because, obviously, it’s a lot more expensive to have a lot of single track pieces moving around in game than having a texture offset based system or no moving tracks at all. I decided that having a lot of enemies on screen is more important for my game than a couple of detailed ones, so I went for a lot less complex models that use fantasy to float around.
It does make me a little bit sad to have to make that compromise but I also realised how much more often developers had to make those compromises one or two decades ago!
A process screenshot of the game-over screen from my mobile tank game project: Tankmanious (working title).
The scoring system
On this screenshot you see the game over screen and the game’s scoring system. The total score of the player is based on firing accuracy, remaining health and the total kills. I later added a system for unlocking bronze, silver or a gold medal on each map based on the total score, so if the player wants to earn a gold medal he or she has to get a perfect score!
What you don’t see on the screenshot (because it’s not a video) is that each score counts up rapidly from zero to the player’s score to give that satisfying feeling that a higher score takes a longer time to process.
I also added blur and vignette filters to the camera that are enabled on game-over in order to make the background less distracting for the GUI text.
One of the first ‘on stage’ process screenshots from my mobile tank game project: Tankmanious (working title).
In the previous post I showed a screenshot from the Unity scene view (‘behind the scenes’) of Tankmanious, so the part that the player never get’s to see. On this screenshot you see the Game view from Unity (‘on stage’), so what the player actually sees during the game.
One of the gameplay features of the game is that bullets can bounce off walls, making it possible for the player to shoot around corners. On normal walls the bullets will only bounce off one time and explode on the second collision. On the destructible ‘BreakOut’ blocks the bullets will keep bouncing around until they hit another wall, creating some nice unpredictability and chaos!
This screenshot also shows the player and enemy tanks with a working spline-based tank track system that I developed but later removed for the sake of a higher frame-rate. More on that later!
The blue lines and green spheres are only visible in the Scene view from Unity so not for the player. The blue lines are a visual representation of the red enemies fields of view. The green spheres represent where the enemies are moving towards and the areas that are being checked to make sure those places are empty.
More to come!
Creating a mobile tank battle game
For more than a year now I have been working on creating a mobile tank battle game with the Unity game engine. After doing different experimental ‘games’ and projects I decided it was time to start working on a serious game, for mobile platforms, to keep it a little bit simple.
The goal is to create at least 75 challenging but small maps divided into three worlds, so it can be played in short bursts.
A lot of work has been done already and the core structure of the game is basically finished, including: enemy A.I, player movement, main menu GUI, game GUI, score system, medals system, different weapons, different destructible enemies and more than a third of the maps.
Things that still need to be done are: creating more maps, tweaking particle systems(explosions!), finding the right techno background music, balancing map difficulty, balancing enemy difficulty (firing rate, patrol and chase speeds etc.) and a lot more optimisation.
Making games is difficult, a lot of work and it often feels like playing chess blindfolded, but I find the whole process of programming, designing graphics and learning about computer science very interesting.
It takes a lot of time to learn everything that is needed but if I had to learn everything all over again I would, because it’s so satisfying to discover all the elegant mathematical systems that are involved.
I’m hoping that by showing the process ‘on stage’ as well as ‘behind the scenes’, that I can make more people feel enthusiastic about my game and game design in general.
Screenshot taken from a example scene that i created in Unity3D for a workshop on how to create a fantasy island level
*Update!*. Since the beginning of this year I have been developing and teaching workshops on game design with Unity3D on a high school. In these workshops I teach kids how to use the Unity editor, Unity’s terrain tools to sculpt terrain, add trees and grass, use different textures, lights, particle systems, C# programming and little bit of 3D modeling with Sculptris. All whilst building their own private island. Because who doesn’t want a private island?