Character Movement in Unity

Rewriting the character movement code for my character I found several approaches.

  1. Move by altering the transform.position of the character.
  2. Move using a character controller component and forces.
  3. Move using rigidBody component and forces.

The first of these worked fine but didn’t play well with my camera control code. Also, since I’d reworked the level generation code to automatically build invisible walls of box colliders in a corridor of any given width or height I wanted a solution that used these. Not using the colliders would have meant adding code to check whether the player would exceed the bounds of the level on the next frame, and I’d rather not have to write this if I can help it.

The second option seemed like a better fix. It would let me use the colliders I’d added to the level geometry but it became clear that I wouldn’t get the arcade style movement I wanted. Move() worked okay but SimpleMove() didn’t work at all, and neither allow any interaction with the Unity physics model.  I saw a lot of negative feedback on the character controller component, so I decided to try the rigidBody instead.

In using rigidBody I was very much at the end of my rope in getting the movement I wanted. I found however that with some adjustments to the mass and drag of the player rigidBody and greatly increasing the gravity of Unity’s Input Axis functionality I could get very close to perfect movement; very responsive but with just a hint of inertia. It will need some tweaking no doubt once the game nears completion but it’s far better than it was. The final problem with this method is that, as it uses the physics engine of Unity it meant that friction was occurring between the player and level walls, though this was easily fixed by making a zero friction physics object and adding it to the box colliders of the level walls.

Some articles that were also useful in getting player movement right…

Colour Switching in Unity

Over the past few days I’ve been tinkering with the code of the game I’m working on and trying to come up with a way in which the colour of all the objects in a game can switch between colour schemes. I think I have a reasonably reliable solution.

Basically my main game controller has two sets of colours: a target colour set and a current colour set. The current colour set is the one that you see, as all the game objects refer to that when updating their colour tint values. The second set, the target colours, are a group of colours that the current colour set is trying to replicate.

Basically what this allows me to do is always refer objects in the scene to the one set of colours without having to worry about how they’re going to transition. The game controller object is constantly managing the colour palette, and all transitions are done there. While it makes for a fair bit of code on the game controller object, it massively reduces the code on everything else in the scene.

There’s a new build that shows this colour switching. It’s not a sudden process, as the game controller only changes the current colour set values by a  small amount each frame. You can try this by pressing the “C” key on your keyboard. The image below links to the newest version, so if I’ve updated it since writing this then it may not work any more (but will likely be closer to completion.)

Colour switch demo

Mighty Switch Force 2 OST

Jake Kaufman does another great soundtrack after his excellent work on Double Dragon Neon. I’ll be listening to this while I work today.

 

Trying Unity

I’ve been working on Unity, trying to wrap my head around it and see how it all works. It’s really great, much easier than I expected it to be and runs beautifully on my ancient iMac. Clicking the image below will take you to a Unity Player that will let you play what I’ve got so far.

Unity game screenshot