How to make character stop after landing
I have a code that executes my characters basic motions fine (forwards,backwards, rotations and static jump) but when I jump forward using W+Space the character won't stop sliding once it lands. As you can see not even the walking animation plays upon landing so I'm assuming unity is not receiving any W input.
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.PlayerLoop;
public class MajortomCONt : MonoBehaviour { [SerializeField] float WalkSpeed = 1; [SerializeField] float RunSpeed = 8; [SerializeField] float rotationSpeed = 80; [SerializeField] float JumpMagnitude = 5; float gravity = 8; float rot = 0f;
Vector3 moveDir = Vector3.zero;
CharacterController controller;
Animator anim;
private void Start()
{
controller = GetComponent<CharacterController> ();
anim = GetComponent<Animator>();
}
private void Update()
{
if(controller.isGrounded)
{
if(Input.GetKey(KeyCode.W)) //Forward
{
moveDir = new Vector3(0, 0, 1);
moveDir *= WalkSpeed;
moveDir = transform.TransformDirection(moveDir);
anim.SetInteger("Condition", 1);
anim.SetFloat("Speed", WalkSpeed);
}
if(Input.GetKeyUp(KeyCode.W))
{
moveDir = new Vector3(0,0,0);
anim.SetInteger("Condition", 0);
}
if(Input.GetKey(KeyCode.W) && Input.GetKey(KeyCode.LeftShift))
{
anim.SetInteger("Condition", 2);
moveDir = new Vector3(0, 0, 1);
moveDir *= RunSpeed;
moveDir = transform.TransformDirection(moveDir);
}
if (Input.GetKey(KeyCode.S))
{
moveDir = new Vector3(0, 0, 1);
moveDir *= -WalkSpeed;
moveDir = transform.TransformDirection(moveDir);
anim.SetFloat("Speed", -WalkSpeed);
anim.SetInteger("Condition", 1);
}
if (Input.GetKeyUp(KeyCode.S))
{
moveDir = new Vector3(0, 0, 0);
anim.SetInteger("Condition", 0);
}
if(Input.GetKey(KeyCode.Space))
{
moveDir = new Vector3(0, 1, 0);
moveDir *= JumpMagnitude;
moveDir = transform.TransformDirection(moveDir);
anim.SetInteger("Condition", 3);
}
if (Input.GetKey(KeyCode.Space) && Input.GetKey(KeyCode.W))
{
moveDir = new Vector3(0, 1, 1);
moveDir *= JumpMagnitude;
moveDir = transform.TransformDirection(moveDir);
anim.SetInteger("Condition", 3);
}
if (Input.GetKeyUp(KeyCode.Space) && Input.GetKeyUp(KeyCode.W))
{
moveDir = new Vector3(0, 0, 0);
moveDir = transform.TransformDirection(moveDir);
anim.SetInteger("Condition", 0);
}
}
rot += Input.GetAxis("Horizontal") * rotationSpeed * Time.deltaTime;
transform.eulerAngles = new Vector3(0, rot, 0);
moveDir.y -= gravity * Time.deltaTime;
controller.Move(moveDir * Time.deltaTime);
}
}
Your answer

Follow this Question
Related Questions
Animator.GetFloat returning wrong value unity 0 Answers
Character Controller which suddenly has stopped working (Move() does not seem to do anything) 0 Answers
FPS Walker bunny hops if stop walking while on slopes 2 Answers
Hold the jump button to jump higher with CharacterController 1 Answer
Problem with Animator and transform.position and physics 1 Answer