Character Controller Showcase
Description
My goal with this project was to develop the ultimate top-down movement controller. The controller features numerous settings that can simulate a wide range of movement styles. The project also features a simple-to-use UI to play around with different movement settings in a natural environment.
The movement controller offers settings for the following aspects:
• Top speed
• Acceleration and deceleration times and profiles
• Inertia
• Obstacle avoidance
• Camera zoom and movement
Keywords
• Personal Project
• Prototype
• Unity, C#
Contributions
Implemented Obstacle Avoidance
The controller includes an automatic obstacle avoidance system that adjusts character movement based on the environment, while ensuring the player still feels in control.
Here’s how it works: The controller calculates an approximate stopping position based on the current velocity. If an obstacle is detected along the path, obstacle avoidance is activated. The system performs successive raycasts around the obstacle to find a clear path, and once found, the player's input is temporarily adjusted to steer the character around the obstacle.
The obstacle avoidance system is highly customizable, allowing developers to tweak settings to balance between precise player control and effective obstacle evasion, ensuring that players can smoothly navigate the environment without unwanted collisions.

Describe your image

Describe your image

Describe your image

Describe your image
Implemented Selectable Acceleration and Deceleration Curves
The controller provides precise control over acceleration and deceleration through customizable easing functions, which define how the character’s speed changes over time during both phases.
To determine whether the character is accelerating or decelerating in 2D space, I calculate whether the velocity is moving closer to or farther from the origin.
Two distinct easing functions—one for acceleration and one for deceleration—govern the character's speed. Based on the character's current progress, these functions return the appropriate speed for that moment. By using the inverse of the easing functions, I can calculate this progress: inputting the current speed reveals how far the character has advanced along the acceleration or deceleration curve.

Describe your image

Describe your image

Describe your image

Describe your image

Describe your image

Describe your image

Describe your image

Describe your image
