Персонаж застревает на платформе. 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 шт):
Проблема в том, что ты жестко задаешь вектор движения, ограничивая перемещение по оси y нулём и уничтожая тем самым влияние других внешних сил (той же гравитации). Если на пути у игрока появится препятствие - в твоём случае он пройдёт насквозь, несмотря на коллайдеры.
Вместо Player.velocity = new Vector2(move, 0) * speed;
используй Player.AddForce(new Vector2(move, 0) * speed).
Таким образом ты добавишь к сумме прочих сил свою - движущую вбок.
У AddForce есть дополнительный аргумент, отвечающий за способы приложения силы - постоянное, ускоряющее, взрывное и тп https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html