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

Персонаж сам по себе идёт в сторону в Top-Down игре(Unity 2D)

Артём Жиров Ученик (14), на голосовании 6 месяцев назад
Изначально он ходит вправо вверх, а потом идет по направлению куда указал игрок, И НЕ ОСТАНАВЛИВАЕТСЯЯ
скрипт:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Character: MonoBehaviour
{
Rigidbody2D body;

float horizontal;
float vertical;
float moveLimiter = 0.7f;

public float runSpeed = 20.0f;

void Start ()
{
body = GetComponent<Rigidbody2D>();
}

void Update()
{
// Gives a value between -1 and 1
horizontal = Input.GetAxisRaw("Horizontal"); // -1 is left
vertical = Input.GetAxisRaw("Vertical"); // -1 is down
}

void FixedUpdate()
{
if (horizontal != 0 && vertical != 0) // Check for diagonal movement
{
// limit movement speed diagonally, so you move at 70% speed
horizontal *= moveLimiter;
vertical *= moveLimiter;
}

body.velocity = new Vector2(horizontal * runSpeed, vertical * runSpeed);
}
}
Голосование за лучший ответ
Сергей Иванов Просветленный (48834) 7 месяцев назад
Насколько я понимаю, предположительно, это особенности типа float. Его нежелательно сравнивать с точным значением. Можно ввести значение погрешности, которая, представляет из себя очень малое число, напрмер, 0.001.
Например, допустим, что a - это погрешность, тогда условие может быть таким: horizontal < 0 - a && horizontal > 0 + a && vertical < 0 - a && vertical > 0 + a.
0, конечно, можно убрать. Оставил его для наглядности.

К тому же не совсем понятна логика изменения значений движения персонажа: она меняет движение только при ненулевых значениях, полученных от Input в данном коде, хотя, возможно, логичней было бы сделать, чтобы изменение движения было при любых значениях от Input, если только это не часть геймплея, что игрок не останавливается
Похожие вопросы