Прыжок персонажа

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Прыжок персонажа

Сообщение Max29 01 май 2023, 15:38

Друзья такой вопрос. Движение и прыжок персонажа платформера реализован на физическом движке, и когда персонаж упирается в препятствие прыжок становиться очень сильным, персонажа как бы выталкивает вверх. как с этим бороться, в каком направление двигаться?

скрипт
Синтаксис:
Используется csharp
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class HeroMove : MonoBehaviour
{
    private Animator thisAnimator = null;
    private Rigidbody thisRigidBody = null;

    private int moveAnm = Animator.StringToHash("moveFlt");

    public bool isRun;
    public bool isHor;
    public bool isGrounded;

    public float jumpForce;
    public float speed;
    public float horizont;

    private void Awake()
    {
        thisAnimator = GetComponent<Animator>();
        thisRigidBody = GetComponent<Rigidbody>();
    }

    private void Update()
    {
        horizont = Input.GetAxis("Horizontal"); // Получение ввода горизонтальной оси и запись ее в переменую

        isRun = Input.GetKey(KeyCode.LeftShift); // проверка есть ли ввод на клавишу бег
        isHor = Input.GetAxis("Horizontal") > 0; // проверка есть ли ввод на горизонтальную ось


        // Включение анимаций
        if (!isRun & isHor)
        {
            thisAnimator.SetFloat(moveAnm, horizont * 0.5f, 0.1f, Time.deltaTime); // Анимация ходьбы
        }

        if (isRun & isHor)
        {
            thisAnimator.SetFloat(moveAnm, horizont, 0.1f, Time.deltaTime); // Анимация бега
        }

        if (!isHor & !isRun)
        {
            thisAnimator.SetFloat(moveAnm, 0.0001f, 0.1f, Time.deltaTime); // Анимация покоя
        }
    }

    private void FixedUpdate()
    {
        MovementLogic();
        JumpLogic();
    }

    // Логика движения
    private void MovementLogic()
    {
        Vector3 movement = new Vector3(0.0f, 0.0f, horizont);
        transform.Translate(movement * speed * Time.fixedDeltaTime);
    }

    // Логика прыжка
    private void JumpLogic()
    {
        if (Input.GetAxis("Jump") > 0)
        {
            if (isGrounded)
            {
                thisRigidBody.AddForce(Vector3.up * jumpForce);
            }
        }
    }


    // Проверка "заземления" персонажа
    private void IsGroundedUpate(Collision collision, bool value)
    {
        if (collision.gameObject.tag == ("Ground"))
        {
            isGrounded = value;
        }
    }

    void OnCollisionEnter(Collision collision)
    {
        IsGroundedUpate(collision, true);
    }

    void OnCollisionExit(Collision collision)
    {
        IsGroundedUpate(collision, false);
    }
}
 
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 15:48

высота нормального прыжка.
Изображение
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 15:49

Высота прыжка если бежать на препятствие.
Изображение
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 15:51

Для персонажа используется boxcolider
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение waruiyume 01 май 2023, 16:51

Попробуйте начать с того, чтобы заменить transform.Translate на Rigidbody.MovePosition.
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 17:31

waruiyume писал(а):Попробуйте начать с того, чтобы заменить transform.Translate на Rigidbody.MovePosition.

К сожалению не помогло. Заменил.
Синтаксис:
Используется csharp
        //transform.Translate(movement * speed * Time.fixedDeltaTime);
        thisRigidBody.MovePosition(transform.position + (movement * speed * Time.fixedDeltaTime));


все осталось так же.
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 17:35

персонаж так же как будто зацепляется за колаидер препятствия.

Изображение

персонаж не должен запрыгнуть на этот куб. если прыгнуть не касаясь куба, то высота прыжка ниже куба
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение 1max1 01 май 2023, 18:06

В чем прикол использовать в одном месте адфорс в другом трансформ? Если нужно физическое движение с учетом всех столкновений, то нужно использовать ТОЛЬКО AddForce либо rb.velocity, все остальное проходит через коллайдеры.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 18:21

1max1 писал(а):В чем прикол использовать в одном месте адфорс в другом трансформ? Если нужно физическое движение с учетом всех столкновений, то нужно использовать ТОЛЬКО AddForce либо rb.velocity, все остальное проходит через коллайдеры.

Ну трансформ я уже заменил на мув позишн, который является методом ригид боди(учимся, для этого и задаем вопросы), но проблема то не ушла. С проблемой я уже самостоятельно разобрался только не знаю это решение проблемы или костыль, подскажите. к кубу я применил физический материал где трение выкрутил на 0.
Последний раз редактировалось Max29 01 май 2023, 18:22, всего редактировалось 1 раз.
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 18:22

и теперь персонаж не цепляется за куб при прыжке.
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение 1max1 01 май 2023, 18:38

Попробуй так:

Синтаксис:
Используется csharp
Vector3 movement = new Vector3(0.0f, rb.velocity.y, horizont * speed);
rb.velocity = movement;

Только значение speed настрой.
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 18:55

1max1 писал(а):Попробуй так:

Синтаксис:
Используется csharp
Vector3 movement = new Vector3(0.0f, rb.velocity.y, horizont * speed);
rb.velocity = movement;

Только значение speed настрой.

Спасибо большое. Работает, да я понимал что если использую для перемещений физику то и надо применять везде силы, а не принудительное перемещение объекта, просто у меня до этого с велиосити фигня какая то выходила, объект движется но при прыжке когда он начинал приземлятся это происходило замедленно. Сейчас все заработало как надо!! :-bd Ну чтож будем дальше изучать, просто в справочниках не всегда все ясно написано.
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17

Re: Прыжок персонажа

Сообщение Max29 01 май 2023, 18:57

а сейчас понял почему медленно падал, в векторе 3 для оси Y у вас прописано thisRigidBody.velocity.y, а у меня не было, еще раз спасибо.
Max29
UNец
 
Сообщения: 23
Зарегистрирован: 20 ноя 2022, 14:17


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17