Character Controller Changes


Over the span of this semester, one of the main challenges for me specifically was creating a character controller that felt good to use, worked well with our gameplay loop and was intuitive to the player. This blog post will be detailing the different iterations of the controls over the course of development.

The first build of the game showcased limited but functional movement, with the player being able to move forward and rotate around 360 degrees. I wished to make controlling the bird similar to flying a plane in other types of games, so there was originally inverted movement for rising and diving. W was to dive, S was to rise and A rolled left while D rolled right. Vertical movement was based off of the local position of the player, and it was used to turn left or right while rolling. The bird felt more like a space ship than an airplane, keeping it's rotation and angle of movement until a new input was given.

The second build came with a lot of changes. First, movement was no longer based off of local position, and when the player rolled it would turn in the direction of the roll. Vertical movement was also changed to no longer be inverted, as playtesters had stated made the controls feel awkward and confusing. Another functionality of detecting targets was implemented, but used where the bird was looking to detect targets. Feedback from this playtest were better, but still gave me things to polish with the controller. Rotation was still 360 degrees, detecting targets was difficult and the player could fly through terrain.

Third build and second round of playtesting I ran into unexpected issues with the character controller. While originally translating the bird's position for movement, I decided to change the movement to use force and a rigidbody instead to fix the collision bugs. I also worked on changing the camera, hoping to make it less disorienting while flying around and changing the roll as well as vertical movement to be clamped. After countless attempts, I stuck with the camera being a child of the bird and simply following it from a distance. While it looks strange when the bird rolls, it is the easiest to have the camera positioned in a place that feels good. I also added another camera to the bird that the player can activate by holding space. This camera is used to detect targets from below instead of flying directly into them. This playtest went well, but there was more feedback to help me refine the controller even more. Playtesters stated that the secondary camera was too hard to use if they were close to the ground, the bird can feel too fast or too slow at times and that the rolling movement using A + D was a bit clunky, disorienting and not very precise. 

For the final build I am planning on editing the bird speed while using the scope or secondary cam, tweaking the bird's speed as well as adding controls that allow for speed control, tweaking how the camera moves withe the bird, and finally adjusting roll movement. This has been a great learning experience, albeit a bit of a frustrating one, to figure out how to create the almost perfect character controller for bird movement. If I could go back from the beginning I think that I would have taken more breaks and spread my time out more evenly. Many times I would run into an error, spend countless hours debugging only to find a solution or workaround the next morning. I have also learned that rotation may not have been the best option due to camera movement, or that cinemachine would have been a viable asset for me to learn. Nearing the end of this project, I am a bit annoyed that this has taken the majority of my time, but relieved that is has started to come together and reach a more polished state.

Get !Bird

Leave a comment

Log in with itch.io to leave a comment.