Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Что делать, написал код на передвижение topdown не работает

Romario Pepe Ученик (95), на голосовании 1 месяц назад
делал по https://www.youtube.com/watch?v=-5l9oSpbgRY&list=PLnvtH-Q9w2ZAF5e5Kfc9p2-GOFdNFAB8s&index=4 этому видео все проверил вроде совподает







using UnityEngine;

public class Player : MonoBehaviour
{
[SerializeField] private float muvingspeed = 10f;

private PlayerInput playerinputActions;

private Rigidbody2D rb;

private void Awake()
{
rb = GetComponent<Rigidbody2D>();
playerinputActions = new PlayerInput();
playerinputActions.Enable();
}

private Vector2 GetMovementVector()
{
Vector2 inputVector = playerinputActions.Player.ReadValue<Vector2>();

return inputVector;
}
private void FixedUpdate()
{
Vector2 inputVector = GetMovementVector();

inputVector = inputVector.normalized;

rb.MovePosition(rb.position + inputVector * (muvingspeed * Time.fixedDeltaTime));
}

}
Голосование за лучший ответ
ольга бартенева Знаток (317) 2 месяца назад
Чтобы исправить код для передвижения игрока в Unity с использованием подхода "top-down", необходимо убедиться, что движение происходит в плоскости, а также учесть, что игрок может поворачиваться в направлении движения. Вот исправленный код:
using UnityEngine;

public class Player : MonoBehaviour
{
[SerializeField] private float movingSpeed = 10f;

private PlayerInput playerInputActions;
private Rigidbody2D rb;

private void Awake()
{
rb = GetComponent<Rigidbody2D>();
playerInputActions = new PlayerInput();
playerInputActions.Enable();
}

private Vector2 GetMovementVector()
{
return playerInputActions.Player.ReadValue<Vector2>();
}

private void FixedUpdate()
{
Vector2 inputVector = GetMovementVector();

// Нормализуем вектор, чтобы избежать ускорения по диагонали
if (inputVector.magnitude > 1)
{
inputVector.Normalize();
}

// Двигаем игрока
rb.MovePosition(rb.position + inputVector * (movingSpeed * Time.fixedDeltaTime));

// Поворачиваем игрока в направлении движения
if (inputVector != Vector2.zero )
{
float angle = Mathf.Atan2(inputVector.y, inputVector.x) * Mathf.Rad2Deg;
rb.rotation = angle;
}
}
}

Изменения и пояснения:

Переименование переменной: Изменил muvingspeed на movingSpeed для лучшей читаемости.

Нормализация вектора: Добавил проверку на нормализацию вектора, чтобы избежать ускорения при движении по диагонали.

Поворот игрока: Добавил код для поворота игрока в направлении движения, используя Mathf.Atan2 для вычисления угла.
Теперь игрок будет двигаться в 2D-пространстве и поворачиваться в направлении движения, что соответствует типичному поведению для игр в жанре "top-down".
Romario PepeУченик (95) 2 месяца назад
спасибо , а где была ошибка ?
Panda BambokУченик (100) 2 месяца назад
не работает
Похожие вопросы