Skip to content

Instantly share code, notes, and snippets.

@RosayGaspard
Created January 23, 2019 14:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save RosayGaspard/767cf6864c84defc1374e0e2bc551f15 to your computer and use it in GitHub Desktop.
Save RosayGaspard/767cf6864c84defc1374e0e2bc551f15 to your computer and use it in GitHub Desktop.
Custom 3rd person character controller for Unity
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour {
private CharacterController characterController;
private Animator animator;
private float moveSpeed;
private bool hasJumped;
[SerializeField]
private float walkSpeed = 6;
[SerializeField]
private float runSpeed = 12;
[SerializeField]
private float turnSpeed = 50f;
[SerializeField]
private float jumpHeight = 50f;
[SerializeField]
private float jumpSpeed = 8.0f;
[SerializeField]
private float gravity = 9.8f;
[SerializeField]
private float vertical_speed = 0.0f;
private Vector3 turnMovement;
private void Awake()
{
characterController = GetComponent<CharacterController>();
animator = GetComponentInChildren<Animator>();
}
private void Update()
{
/*
* Animations that doesn't impact movement
*/
if (Input.GetKeyDown("b"))
{
animator.SetTrigger("Blink");
}
if (Input.GetKeyDown("m"))
{
animator.SetTrigger("Meow");
}
/*
* Movement
*/
var movement = Vector3.zero;
if (Input.GetKey("left shift"))
{
moveSpeed = runSpeed;
}
else
{
moveSpeed = walkSpeed;
}
var horizontal = Input.GetAxis("Horizontal");
var vertical = Input.GetAxis("Vertical");
movement = new Vector3(0, 0, vertical);
Vector3 relativeMovement = transform.TransformVector(movement);
relativeMovement *= moveSpeed;
animator.SetFloat("Speed", movement.magnitude * moveSpeed);
if (characterController.isGrounded)
{
animator.ResetTrigger("Falling");
animator.ResetTrigger("Jump");
hasJumped = false;
vertical_speed = 0.0f;
if (Input.GetKeyDown("space"))
{
hasJumped = true;
animator.SetTrigger("Jump");
relativeMovement.y = jumpHeight;
vertical_speed = jumpSpeed;
}
}
else
{
if (!hasJumped && vertical_speed < -3.0f)
{
animator.SetTrigger("Falling");
}
}
Debug.Log("Vertical speed: " + vertical_speed);
vertical_speed -= gravity * Time.deltaTime;
relativeMovement.y = vertical_speed;
characterController.Move(relativeMovement * Time.deltaTime);
transform.Rotate(Vector3.up, horizontal * turnSpeed * Time.deltaTime);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment