Q
Q
qwertygameover2021-03-11 13:50:51
Unity
qwertygameover, 2021-03-11 13:50:51

Shaking of the character when colliding with obstacles and when moving, how to fix?

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{

    public float playerspeedRL = 5.0f;
    public float playerspeed = 1.0f;
    public FixedJoystick joystick;

    void Start()
    {
        
    }

    void Update()
    {
        transform.position += new Vector3(joystick.Direction.x * playerspeedRL * Time.deltaTime, 0, playerspeed * Time.deltaTime);
    }
}


Literally one line of code, when the Persian moves, he falls through and is simultaneously pushed out from below, and also if he is pushed against the wall, he is also pushed out, can you please help

Answer the question

In order to leave comments, you need to log in

1 answer(s)
T
Tiksten, 2021-03-11
@Tiksten

Character movement is best done through AddForce
Here is an example from my project

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public CharacterController controller;

    public AudioClip[] steps;
    public AudioSource audioSource;
    private bool stepPlayed;
    public float timeBetweenSteps;

    public float speed = 12f;
    public float gravity = -9.81f;
    public float jumpHeight = 3f;

    public Transform groundCheck;
    public float groundDistance = 0.4f;
    public LayerMask groundMask;

    Vector3 velocity;
    bool isGrounded;

    // Update is called once per frame
    void Update()
    {
        isGrounded = Physics.CheckSphere(groundCheck.position, groundDistance, groundMask);

        if (isGrounded && velocity.y < -2f)
            velocity.y = -2f;

        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x + transform.forward * z;

        controller.Move(move * speed * Time.deltaTime);

        if (Input.GetButtonDown("Jump") && isGrounded)
            velocity.y = Mathf.Sqrt(jumpHeight * -2 * gravity);

        velocity.y += gravity * Time.deltaTime;

        controller.Move(velocity * Time.deltaTime);

        StepSoundPlay();
    }

    private void StepSoundPlay()
    {
        if (!stepPlayed)
        {
            if (isGrounded && (Input.GetAxisRaw("Vertical") != 0 || Input.GetAxisRaw("Horizontal") != 0))
            {
                stepPlayed = true;
                audioSource.clip = steps[Random.Range(0, steps.Length)];
                audioSource.Play();
                StartCoroutine(Wait());
            }
        }
    }

    private IEnumerator Wait()
    {
        yield return new WaitForSeconds(timeBetweenSteps);
        stepPlayed = false;
    }
}

This code is suitable for First Person games
It also has steps (StepSounds)

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question