언더테일 스타일의 2D RPG 게임을 만드는 유니티 초보야.
내 게임에서 플레이어는 아래와 같은 구조로 방향키 입력을 받아 움직여.
public class PlayerMovement : MonoBehaviour
{
public static PlayerMovement Instance { get; private set; }
private PlayerInput playerInput;
public Vector2 inputVec;
public bool canMove = true;
void FixedUpdate()
{
if (!canMove)
{
inputVec = Vector2.zero;
return;
}
rb2D.MovePosition(rb2D.position + inputVec * moveSpeed * Time.fixedDeltaTime);
}
public void OnMove(InputAction.CallbackContext context)
{
if (context.performed) inputVec = context.ReadValue<Vector2>();
else if (context.canceled) inputVec = Vector2.zero;
}
}
여기서 canMove는 플레이어가 NPC와 대화를 할 때나, 순간이동, 컷씬 애니메이션을 할 때 방향키 입력을 안 받게 하는 변수야.
외부에서 PlayerMovement.Instance.canMove = false로 제어해.
문제는 플레이어가 방에 들어간다고 할 때, 방 맵으로 순간 이동을 위해 canMove = false를 실행하는데,
대부분 게임 하는 사람들은 방향키를 계속 누른 채로 있잖아?
그럼 방 안으로 이동이 끝나고 canMove = true가 실행될 때 즉시 움직임이 재개되어야 하는데, 플레이어가 멈춰 서 있는 일이 생겨.
다시 움직이게 하려면 방향키를 한 번 뗐다가 다시 움직여 줘야 해.
이거 해결하는 방법이 없을까? 어제 하루 종일 씨름했는데 도저히 방법이 없어서 여기 물어 봐. 미리 고마워!
InputAction에 현재 눌려있는 상황인지 bool값으로 반환하는 IsPressed()가 있을거임 canMove 재활성화할 때 InputAction이 현재 눌려있는지 여부 판단해서 inputVec 다시 세팅해보셈
고마워! 새해 복 많이 받아!
https://gall.dcinside.com/game_dev/203747