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

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

Сообщение Anonymous »

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

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

using UnityEngine;
using UnityEngine.InputSystem;

public class Player: MonoBehaviour
{
public class Axis
{
public bool up = false;
public bool down = false;
public bool left = false;
public bool right = false;
}

public Axis fixation = new Axis();
public Rigidbody2D rb;
public PlayerInput playerInput;

private void Start()
{
rb = GetComponent();
playerInput = GetComponent();
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 , но это не помогло, используя Rigid -CordeConstraints.freezePosition

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

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

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

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

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

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