Персонаж застревает на платформе. Unity

Делаю первую небольшую игру самостоятельно. Есть вот такой метод Flip, отвечающий за поворот персонажа. Есть платформа, на которой он стоит. Метод Flip, естественно, находится в Update. Персонаж не может упасть с платформы, как будто какие то границы его не выпускают, когда Flip вызывается. Убираю Flip из кода игры - персонаж падает спокойно с платформы. В чем здесь проблема? Unity 2D

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

public class PlayerScript : MonoBehaviour
{
    public Rigidbody2D Player;
    float speed = 5;
    float move;
    

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // Движение героя 
       
        move = Input.GetAxis("Horizontal");
        Player.velocity = new Vector2(move, 0) * speed;
        Flip();
    }

    // Разворот героя
    void Flip()                                                           
    {
        if (move < 0)
        {
            GetComponent<SpriteRenderer>().flipX = true;
            


        }
        else if (move > 0)
        {
            GetComponent<SpriteRenderer>().flipX = false;
            
        }
        
    }


    // Прыжок 
    void Jump()
    {
        
    }
}


Ответы (1 шт):

Автор решения: Lexanom

Проблема в том, что ты жестко задаешь вектор движения, ограничивая перемещение по оси y нулём и уничтожая тем самым влияние других внешних сил (той же гравитации). Если на пути у игрока появится препятствие - в твоём случае он пройдёт насквозь, несмотря на коллайдеры.

Вместо Player.velocity = new Vector2(move, 0) * speed; используй Player.AddForce(new Vector2(move, 0) * speed). Таким образом ты добавишь к сумме прочих сил свою - движущую вбок.

У AddForce есть дополнительный аргумент, отвечающий за способы приложения силы - постоянное, ускоряющее, взрывное и тп https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html

→ Ссылка