- Home /
Sliding after moving
So I'm using a character controller and I want the player to slide around like he's on ice, but I don't know how to do that, so I'd like some help on getting it to work, or if you have suggestions on different things I should use, like a rigidbody, please let me know, here's the code.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(CharacterController), typeof(Animator))]
public class Character : MonoBehaviour
{
public CharacterController controller;
public Transform cam;
public float speed = 6f;
public float turnSmoothTime = 0.1f;
float turnSmoothVelocity;
[SerializeField]
private float jumpSpeed, gravity;
private Vector3 movementDirection = Vector3.zero;
private Vector3 movementDirection2 = Vector3.zero;
void Start()
{
controller = GetComponent<CharacterController>();
animator = GetComponent<Animator>();
}
void Update()
{
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
Vector3 direction = new Vector3(horizontal, 0f, vertical).normalized;
if (direction.magnitude >= 0.1f)
{
float targetAngle = Mathf.Atan2(direction.x, direction.z) * Mathf.Rad2Deg + cam.eulerAngles.y;
float angle = Mathf.SmoothDampAngle(transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, turnSmoothTime);
transform.rotation = Quaternion.Euler(0f, angle, 0f);
Vector3 moveDir = Quaternion.Euler(0f, targetAngle, 0f) * Vector3.forward;
controller.Move(moveDir.normalized * speed * Time.deltaTime);
}
if (Input.GetButton("Jump") && controller.isGrounded)
{
movementDirection.y = jumpSpeed;
}
movementDirection.y -= gravity * Time.deltaTime;
controller.Move(movementDirection * Time.deltaTime);
}
}
Answer by unity_1B85DD952C4AEAF39E65 · Feb 10 at 08:43 PM
I would have values set for the current x and z velocities, and have it so that if the Axis input is small (or 0) it moves with the current velocities minus 0.1 (or a suitable value)
the code would look something like this
float currentHorizontal;
float currentVertical;
currentHorizontal = transform.velocity.x;
currentVertical = transform.velocity.z;
Vector3 direction = new Vector3(currentHorizontal - 0.1, 0f , currentVertical-0.1);
Your answer
Follow this Question
Related Questions
Best practice when creating character / player control scripts? 2 Answers
Getting my character to slide 2D platformer 0 Answers
Character Controller "walking on air" off cliffs/slopes 1 Answer
Player keeps flying up 0 Answers
Move player via button press with including acceleration / decelertion? 0 Answers