게임개발/Unity

24-10-08 Unity 2D 입문 02

몰록 2024. 10. 8. 21:03

 

강의 내 강사님의 말씀이 너무 빠르고 거침없어서 잘 이해하고 넘어가기가 벅차다

 

그러기에 다시 천천히 들어보며 요약 정리해보겠다

 

 


 새로운 인풋 시스템( New Input System )

기존 인풋 메니저에선 다양한 플랫폼에 대응하거나 키를 변경(리바인딩)하는 부분이 부족하다고 한다,

그래서 입력 처리 로직 실행 주체 분리 할 필요성을 느끼게 되는데,

그것이 인풋 시스템이 새롭게(나온지 수년씩 지나버렸지만)  만들어진 이유라고 한다.

 

이 새 인풋 시스템의 핵심 개념은 '입력 행동 정의' , '입력 행동 그룹화' , '플레이어 인풋 컴포넌트' 가 있다.

 

이 새 인풋 시스템을 사용하기 위해 제공된 패키지를 받아야 한다.

 

Window -> Package Manager -> Input System 검색

이렇게 패키지를 받아오면 Input Actions 라는 컴포넌트를 만들어 사용할수 있게 된다. 

Project창에 우클릭 -> Creat -> Input Actions

 

컴포넌트를 생성해주면 열어서 세부 설정을 해줘야 하는데 우선 'Schemes' 를 설정해줘야 한다. Schemes란 계획이란 뜻인데,

나는 보통 '간사한 음모' 따위에 쓰는 단어로 알고 있었어서 생소했다.. 아무튼 이 Scheme별로 다른 키 바인딩을 설정해줄수 있는데, 그 다른 키 바인딩은 어느 플랫폼이냐에 따라 달라질수 있는것이다. 키마냐 패드냐 모바일 터치패드냐 따위에 차이를 구분해주는 단위인듯 하다.

키마 scheme을 설정하는 모습 ; No Control Schemes -> Add Control Scheme

scheme을 설정해주면 다음엔 Action Maps을 설정해주는데, 현 강의에선 하나의 플레이어 캐릭터만 있으므로 Player 액션맵 하나만 만들어 그안에 컨트롤 키를 넣어주면 된다. 

 

Action Map 안에는 Action 단의로 정의를 해줄수 있다. 그 Action의 방식마다 Type의 설정이 다르고, Binding으로 설정하는 키 입력 방식도 달라진다. 

 

가령 Move같은경우엔 Vector2 타입의 액션이고, 미리 만들어진 위,아래,좌,우 컴포지트를 통해 바인딩을 해주게되었다.  

Move 설정 방식. 설명하는것보단 직접 보고 만들어보는게 더 빠르다..

 

다만 Look의 경우엔 달라지는데, 이 경우엔 버튼을 누르는게 아니라 마우스 위치 자체로 값을 받아오기 때문에 컴포지트 없이 바인딩이 가능하다.

 

Look 설정 방식

이렇게 컴포넌트 세팅이완료되면 플레이어에 적용해줘야 하는데 방식은 다음과 같다.

 

오브젝트에 Add Component -> Player Input 추가

 

플레이어 오브젝트에 Player Input 추가하고, 추가된 PlayerInput에 설정해둔 Action을 넣어준다.

이때 Default Scheme이 Any인 이유는 Scheme이 현재 하나뿐이기때문에 상관이 없기 때문이라고 한다.

 

여기서 Behavior 부분이 중요한데, Send Message는 Unity에서 자주 쓰는 StartUpdate처럼 조건을 만족하는 메소드들이 그 이름(메세지)을 통해 발동 되는 것인데, 가령 Start는 오브젝트가 생성될때, 그리고 Update는 한 프레임이 지나갈때라면, 밑에 정해진 키워드 ( OnMove, OnLook, OnFire 등) 는 Action Controller에서 정의된 Action( Move, Look, Fire )의 키가 입력될때 발동되는 것이다. 

 

그러니 우리가 해야할것은 저 OnMove, 즉 Move 인풋 등이 들어왔을때 어떤 일이 발생하는지를 코딩 해줘야 하는것이다.

 

다른 Behavior를 살펴보자면..

더보기

Broadcast Messages : Send Message와는 달리 게임 오브젝트와 그 자식 오브젝트까지 메세지를 뿌린다. 자식 오브젝트에서 같은 이름으로 동작이 발생할때 쓰일수 있을것같다.

 

Invoke Unity Event : 이전에 버튼을 만들때 썼던것처럼 ( OnClick ) UnityEvent 현태로 관리되어 편하다고 한다.

 

Invoke C Sharp Event : OnActionTriggered 등에서 어떤 이벤트인지 확인해서 쓸수 있다고 한다.

 

..추가 기술