Как заморозить игрока, чтобы он не двигался в сторонуC#

Место общения программистов C#
Ответить
Anonymous
 Как заморозить игрока, чтобы он не двигался в сторону

Сообщение Anonymous »

Как я могу сделать так, чтобы игрок не мог двигаться даже через физику, в одном направлении?

Код: Выделить всё


using UnityEngine;

using UnityEngine.InputSystem;

public class Player: MonoBehaviour

{

public class Axis

{

public bool up = false, down = false, left = false, right = false;

}

public Axis fixation = new Axis();

public Rigidbody2D rb;

public PlayerInput playerInput;

void Start()

{

rb = GetComponent < Rigidbody2D > ();

playerInput = GetComponent < PlayerInput > ();

PlayerInputAction input = new PlayerInputAction();

input.Enable();

input.Gameplay.FreezeUp.performed += (InputAction.CallbackContext _) => FixateAxes("up", true);

input.Gameplay.FreezeUp.canceled += (InputAction.CallbackContext _) => FixateAxes("up", false);

input.Gameplay.FreezeDown.performed += (InputAction.CallbackContext _) => FixateAxes("down", true);

input.Gameplay.FreezeDown.canceled += (InputAction.CallbackContext _) => FixateAxes("down", false);

input.Gameplay.FreezeLeft.performed += (InputAction.CallbackContext _) => FixateAxes("left", true);

input.Gameplay.FreezeLeft.canceled += (InputAction.CallbackContext _) => FixateAxes("left", false);

input.Gameplay.FreezeRight.performed += (InputAction.CallbackContext _) => FixateAxes("right", true);

input.Gameplay.FreezeRight.canceled += (InputAction.CallbackContext _) => FixateAxes("right", false);

}

private void FixedUpdate()

{

Vector2 v = rb.linearVelocity;

if (fixation.up && v.y > 0) v.y = 0;

if (fixation.down && v.y < 0) v.y = 0;

if (fixation.left && v.x < 0) v.x = 0;

if (fixation.right && v.x > 0) v.x = 0;

rb.linearVelocity = v;

}

private void FixateAxes(string axis, bool stat)

{

switch (axis)

{

case "up":

fixation.up = stat;

break;

case "down":

fixation.down = stat;

break;

case "left":

fixation.left = stat;

break;

case "right":

fixation.right = stat;

break;

}

}

}
Но проблема в том, что игрок только замедляется, а затем в коротких всплесках, кажется, он плавает дальше, и я также пытался через LinearDamping , но это не помогло, используя жесткие конструкции. FreezePosition

Подробнее здесь: https://stackoverflow.com/questions/797 ... o-one-side
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»