@maks_lali

Баг с прыжком,рывком?

помогите пожалуста, я новичек юнити и часть кода беру из интернета и у меня проблема когда я делаю ривок или пригаю с колайдера которий стоит под наклоном меня довольно сильно подбрасивает в верх.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class PlayerMove : MonoBehaviour // - Вместо «PlayerMove» должно быть имя файла скрипта
{
    //------- Функция/метод, выполняемая при запуске игры ---------
    public Rigidbody2D rb;
    public Animator anim;
    public GameObject keyIcon;
    void Start()
    {
        rb = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        //-v- Для автоматического присваивания в переменную, радиуса коллайдера объекта «GroundCheck»
        GroundCheckRadius = GroundCheck.GetComponent<CircleCollider2D>().radius;
    }
    //------- Функция/метод, выполняемая каждый кадр в игре ---------
    void Update()
    {
        Walk();
        Reflect();
        Jump();
        CheckingGround();
        Lunge();
    }
    //------- Функция/метод для перемещения персонажа по горизонтали ---------
    public Vector2 moveVector;
    public int speed = 3;
    void Walk()
    {
        moveVector.x = Input.GetAxisRaw("Horizontal");
        rb.velocity = new Vector2(moveVector.x * speed, rb.velocity.y);
        anim.SetFloat("moveX", Mathf.Abs(moveVector.x));
    }
    //------- Функция/метод для отражения персонажа по горизонтали ---------
    public bool faceRight = true;
    private bool keyButtonPushed;
    void Reflect()
    {
        if ((moveVector.x > 0 && !faceRight) || (moveVector.x < 0 && faceRight))
        {
            transform.localScale *= new Vector2(-1, 1);
            faceRight = !faceRight;
        }
    }
    //------- Функция/метод для прыжка ---------
    public int jumpForce = 10;
    void Jump()
    {
        if (onGround && Input.GetKeyDown(KeyCode.Space))
        {
            anim.StopPlayback();
            anim.Play("jump");
            rb.velocity = new Vector2(0, jumpForce);
        }
    }

    //------- Функция/метод для обнаружения земли ---------
    public bool onGround;
    public LayerMask Ground;
    public Transform GroundCheck;
    private float GroundCheckRadius;
    void CheckingGround()
    {
        onGround = Physics2D.OverlapCircle(GroundCheck.position, GroundCheckRadius, Ground);
        anim.SetBool("onGround", onGround);
    }
    //-----------------------------------------------------------------

    public int lungeImput = 5000;
    void Lunge()
    {
        if (Input.GetKeyDown(KeyCode.LeftControl) && !lockLunge)
        {
            lockLunge = true;
            Invoke("LungeLock", 2f);

            anim.StopPlayback();
            anim.Play("lunge");

                rb.velocity = new Vector2(0, 0);

            if (!faceRight) { rb.AddForce(Vector2.left * lungeImput); }
            else { rb.AddForce(Vector2.right * lungeImput); }
        }
    }

    private bool lockLunge = false;
    void LungeLock()
    {
        lockLunge = false;
    }


    void OnTriggerEnter2D(Collider2D other) 
    {
        if(other.tag == "Respawn")
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
        else if (other.CompareTag("key"))
        {
            keyIcon.SetActive(true);
            Destroy(other.gameObject);
        }
    }
    public void OnKeyButtonDown()
    {
        keyButtonPushed = !keyButtonPushed;
    }
    private void OnTriggerStay2D(Collider2D other)
    {
        if(other.CompareTag("wall") && keyButtonPushed && keyIcon.activeInHierarchy)
        {
            keyIcon.SetActive(false);
            other.gameObject.SetActive(false);
            keyButtonPushed = false;
        }
    }
}
  • Вопрос задан
  • 49 просмотров
Пригласить эксперта
Ответы на вопрос 1
freeExec
@freeExec
Участник OpenStreetMap
Потому что на наклоне ты загоняешь персонажа в пол, и физика в следующий момент прикладывает дополнительную силу, чтобы вытолкнуть его обратно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы