transform.position += speed — работает, но ощущается как деревяшка.
Вот почему и как это исправить.
Три переменных физически честной модели движения:
position — где объект сейчас
velocity — скорость и направление движения
acceleration — как быстро меняется скорость
Каждый кадр (интеграция Эйлера):
velocity += acceleration * Time.deltaTime;
velocity *= (1f - friction * Time.deltaTime); // трение гасит
position += velocity * Time.deltaTime;
Платформер без Rigidbody — конкретный код:
Vector2 velocity = Vector2.zero;
const float ACCEL = 80f;
const float FRICTION= 12f;
const float GRAVITY = 30f;
const float JUMP = 15f;
void Update()
{
float input = Input.GetAxis("Horizontal");
velocity.x += input * ACCEL * Time.deltaTime;
velocity.x *= 1f - FRICTION * Time.deltaTime;
if (!isGrounded) velocity.y -= GRAVITY * Time.deltaTime;
if (isGrounded && Input.GetKeyDown(KeyCode.Space))
velocity.y = JUMP;
transform.position += (Vector3)(velocity * Time.deltaTime);
}
Результат: персонаж разгоняется и плавно тормозит.
Это и есть основа game feel.
#мат_геймдев #МатРазбор #физика