Creating a Physics Based Character Controller from Scratch in Unity
Physics Based Character Controller part 1
In this article we will create a Character Controller from scratch without using a rigidbody. Normally the rigidbody component will handle the physics part, but we choose to write our own code to make our player move how we want.
In the Editor
Add CharacterController component to Player
In the Player Script
Create handle to CharacterController component and assign it in Start().
In Update() we get the horizontal input and set it as our direction. We only need horizontal input since our game will be a platformer. Velocity is direction with speed. Speed for our player is set at the top of our script.
At the last part we assign the velocity to move with to our character controller corrected by time it took since last frame.
//handle
private CharacterController _controller;//config
private float _speed = 3f;void Start()
{
_controller = GetComponent<CharacterController>();
if (_controller == null) { Debug.LogError(“player.charactercontroller is null”); }
}void Update()
{
//get horizontal input = direction
Vector3 direction = new Vector3(Input.GetAxis(“Horizontal”), 0);
//velocity = direction with speed
Vector3 velocity = direction * _speed;
//move player with velocity
_controller.Move(velocity * Time.deltaTime);
}