- Home /
I need help with sliding in infinite Runner please someone help
I am making a running game I am facing problem with sliding sysem when I slide animations gets player but my character control stays straight and I can't slide down from obstacle
my English is not that good if you didn't understand what I mean check out this video I captured
Answer by AaronXRDev · Nov 16, 2018 at 10:56 PM
The problem is that the character controller collision area doesn't change when you slide. I would attach a script named CharacterSlideController and add something that adjusts the size of the collider when the player goes under things.
Something like this:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CharacterSlideController : MonoBehaviour {
private CharacterController characterController;
private void Start()
{
characterController = GetComponent<CharacterController>();
}
public void StartSlide()
{
// Shrink the collision area when the slide starts
characterController.center = new Vector3(0, -0.6f, 0);
characterController.height = 0.75F;
}
public void EndSlide()
{
// Restore the collision area when the slide ends
characterController.center = new Vector3(0, 1f, 0);
characterController.height = 2;
}
}
Then you could just call StartSlide and EndSlide from the animation, if you wanted.
how i call call from animation
CharacterController controller;
float speed = 5.0f;
Vector3 moveVector;
float gravity = 9.81f;
float verticalVelocity;
Animator anim;
// Use this for initialization
void Start()
{
controller = GetComponent<CharacterController>();
anim = GetComponent<Animator>();
}
// Update is called once per frame
void Update()
{
moveVector = Vector3.zero;
//x
moveVector.x = Input.GetAxisRaw("Horizontal") * speed;
//y
if (controller.isGrounded)
{
verticalVelocity = 0.5f;
}
else
{
verticalVelocity -= gravity * Time.deltaTime;
}
//z
moveVector.z = speed;
controller.$$anonymous$$ove(moveVector * Time.deltaTime);
//animations Slide and Jump
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.UpArrow))
{
anim.SetBool("isJumping", true);
Invoke("StopJumping", 0.2f);
}
if (Input.Get$$anonymous$$eyDown($$anonymous$$eyCode.DownArrow))
{
anim.SetBool("isSliding", true);
Invoke("StopSliding", 0.2f);
}
}
void StopJumping()
{
anim.SetBool("isJumping", false);
}
void StopSliding()
{
anim.SetBool("isSliding", false);
}
$$anonymous$$y Script
Animator
Here is some help on calling scripts from an animation: Using Animation Events
Your answer
Follow this Question
Related Questions
3 lane Character controller switching..? 1 Answer
how to get the default third person character controller in unity 5 to move in midair 0 Answers
2D character control script in a 3D world 0 Answers
How I can Add kick and punch animation to Ethan Third Person Controller in Standard Assets? 0 Answers
How to make a normal WASD controller 4 Answers