@xFantoMx
Учусь делать игры в юнити.

При прикосновении игрока к вертикальному обьекту и движению в его сторону игрок зависает рядом со стеной в Unity2D?

Я сделал небольшую карту со стенами по краям и когда я прыгнул на стену и зажал кнопку движения в сторону стены на которую прыгнул то мой персонаж замер в воздухе. Когда я отжал кнопку движения он упал.

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    [SerializeField] private GameObject Player;
    [SerializeField] private Rigidbody2D PlayerRigidbody;

    [SerializeField] private float PlayerSpeed;
    [SerializeField] private float JumpForce;
    [SerializeField] private float MaxPlayerSpeed;
    [SerializeField] private bool RightFacing;

    private bool OnGround;

    private float PlayerHorizontalMove;

    private void Start()
    {
        PlayerRigidbody = Player.GetComponent<Rigidbody2D>();
    }

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

    void Update()
    {
        PlayerHorizontalMove = Input.GetAxis("Horizontal") * PlayerSpeed;

        if (PlayerRigidbody.velocity.magnitude >= MaxPlayerSpeed)
        {
            PlayerRigidbody.velocity = PlayerRigidbody.velocity.normalized * MaxPlayerSpeed;
        }
    }
    
    private void MovementLogic()
    {
        PlayerRigidbody.velocity = new Vector2(PlayerHorizontalMove, PlayerRigidbody.velocity.y);
    }

    private void JumpLogic()
    {
        if (Input.GetAxis("Jump") != 0 && OnGround)
        {
                PlayerRigidbody.AddForce(new Vector2(0, JumpForce), ForceMode2D.Impulse);
        }
    }


    private void Flip()
    {
        RightFacing = !RightFacing;

    }

    private void OnCollisionStay2D(Collision2D collision)
    {
        if (collision.gameObject.CompareTag("CanJump"))
        {
            OnGround = true;
        }
    }

    private void OnCollisionExit2D(Collision2D collision)
    {
        OnGround = false;
    }
}
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 1
@DrRen7
Это проблема с Rigidbody решить довольно просто когда игрок в воздухе необходимо назначить другой PhysicsMaterial, условно получается из за терния и приложенной силы игрок просто будет зависать на месте. Сейчас точно настойки для материала не подскажу вероятно все должно быть на 0, был проект для это пришлось реализовать как найду дополню ответ
Upd
66a2ef3254220915395225.png
public PhysicMaterial _defaultMaterial; // стандартный материал
  public PhysicMaterial _materialWhenJumping; //матетериал для воздуха

CharacterCollider = GetComponent<Collider>(); //получаем коллайдер перса 
CharacterCollider.material = _defaultMaterial; //<-меняем материал коллайдера
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы