강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

태사단님의 프로필 이미지
태사단

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

유니티에서 사용자 입력까지 대기할 수 있나요?

작성

·

1.5K

0

이전에 유니티를 대강 배운 적이 있어서 유니티로 실습하고 있습니다.

TextRPG 1에서는 함수 내에서 while문을 돌리며 사용자 입력을 ReadLine으로 대기하는 방식을 사용하던데요,

유니티에서 그런 기능이 무엇인지 몰라서 Update 함수에서 키 입력을 받아, 게임 상태(enum으로 캐릭터 생성, 로비, 마을, 필드, 전투 등으로 선언했습니다)에 따라 수행할 동작을 전달해주는 식으로 구현했습니다.

그런데 입력할 키가 많아지거나 상태에 따라 누르는 키가 달라지면(전투중에는 A,S,D를, 필드에선 방향키를 누르는 등) 복잡해질 것 같더라고요. 유니티에는 유효한 사용자 입력을 받을때까지 해당 명령문에서 대기하는 방법이 없나요?

답변 2

1

Rookiss님의 프로필 이미지
Rookiss
지식공유자

안녕하세요,

질문주신 내용은 개념으로 매우 중요한 부분이고,
구체적으로는 Blocking vs Non-Blocking 함수에 대한 이론에 관한 것입니다.
간단한 콘솔 게임은 특정 키를 입력하기 전에는 정말 아무런 동작도 하지 않아도 되기 때문에,
Blocking 함수 (반환하지 않으면, 더 진행도 하지 않는)를 사용할 수 있었습니다.

그런데 일반적인 게임은 사용자가 특별히 키보드나 마우스를 입력하지 않더라도
실행해야 할 일이 굉장히 많습니다. (인공지능이라거나, 맵을 렌더링 한다거나..)
따라서 입력을 받을때까지 대기하는 Blocking 계열 함수는 사용해서는 안 되고(없고),
상태만 확인하고 빠져나오는 Non-Blocking 계열 함수를 사용해야 합니다.
(GetKeyDown은 Non-Blocking 함수의 결과를 저장한 것으로, 이를 이용해 마지막 상태 확인)

따라서 유효한 사용자 입력을 받을때까지 해당 명령문에서 대기하는 직접적인 함수는 없습니다.
다만 나중에 유니티 시간에 배울 Coroutine에 대한 내용을 배우면,
우회적으로 원하는 조건이 만족되기 전엔 다음 단계로 넘어가지 못하게 조절할 수 있습니다.

그게 아니라면 구현하신 방법대로 Update에서 조건에 따라 처리를 하는 것이 맞습니다.
상태가 많아짐에 따라 누르는 키가 달라져서 코드가 신나게 늘어나는 부분이 걱정된다면,
언젠가 나올 State, Component 패턴 등을 배우면 그나마 깔끔하게 관리할 수 있게 됩니다.

0

태사단님의 프로필 이미지
태사단
질문자

감사합니다. 아직 파트1인데 제가 너무 조급했네요 ㅎㅎ

계속 정주행 하겠습니다. 

태사단님의 프로필 이미지
태사단

작성한 질문수

질문하기