본문 바로가기
[ Unity ]/- 유니티 실습

유니티 플레이어 이동, 회전(Defalit input system, new input system)

by MRG 2024. 1. 16.
728x90
반응형

 

▣ 기존 입력시스템으로 이동과 마우스 회전하는 코드를 작성하겠습니다.

Project Settings에 Input Manager에 Axes 값을 확인합니다.

 

 

▣ input.GetAxis() 함수를 이용한 플레이어 이동 코드입니다. 

transform.right, transform.forward를 곱한 이유는 플레이어 방향으로 이동하기 위함입니다.

Character Controller를 이용한 이동하는 코드입니다. 

 

 

▣ 마우스 회전도 Input.GetAxis() 함수를 이용해서 값을 받아왔고 

Rotation에 X 값이 위아래 회전, Y값이 오른쪽 왼쪽 회전이기 때문에 위에 코드를 이런 식으로 진행했습니다.

 

https://docs.unity3d.com/kr/530/ScriptReference/Mathf.Clamp.html

 

Mathf-Clamp - Unity 스크립팅 API

Clamps a value between a minimum float and maximum float value.

docs.unity3d.com

 

▣ Mathf.Clamp()는 최소 부동 소수점 값과 최대 부동 소수점 값 사이의 값을 고정합니다.

 

▣ 위아래 회전은 제한해야 하기 때문에 함수를 사용했습니다.

 

 

 

 

 

 

 

 

▣ 패키지에서 Input System을 설치합니다. 

경고창이 나올 경우 Yes를 눌러서 기존 Input System 대신 새로운 Input System을 활성화합니다.

 

 

 

▣ Project Settings에서 Active Input Handling을 New Input System으로 설정합니다. 

 

 

▣ 이번에는 새로운 입력 시스템을 사용해 보겠습니다. 

에셋창에 오른쪽 마우스를 클릭하고 Create -> Input Actions를 클릭하여 생성합니다.

 

 

▣ Control Schema를 설정합니다. 플랫폼을 설정하기 위함입니다. 

우선 연습이니 Player로 지정하겠습니다. 

 

 

▣ + 버튼을 클릭하여 플랫폼에 사용될 입력장치를 선택합니다. 

 

 

 

▣  List에 설정합니다.

설정하지 않으면 입력이 안됩니다. 

 

 

 

 

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.8/manual/ActionsEditor.html

 

Configuring Input | Input System | 1.8.0-pre.2

Configuring Input The Input Actions Editor allows you to configure Input Actions and their associated Bindings and Control Schemes. Open the Input Actions settings by going to Edit > Project Settings > Input System Package > Input Actions The Input Actions

docs.unity3d.com

 

 

▣ 그럼 이런 창이 나오는데

Actions Maps : 현재 정의된 Action Map의 목록을 표시합니다. 각 액션 맵은 그룹으로 함께 활성화하거나 비활성화할 수 있는 액션 모음입니다.

 

▣ Actions : 현재 선택한 작업 맵에 정의된 모든 작업과 각 작업과 연결된 바인딩을 표시합니다.

 

▣ Action Properties : 액션 패널에서 현재 선택한 액션 또는 바인딩의 속성을 표시합니다. 이 패널의 제목은 액션 패널에서 액션 또는 바인딩을 선택했는지 여부에 따라 변경됩니다.

 

▣ 각각 이름을 정하고 Action Type은 Value로 값을 받아오게 하고 그 값에 타입 Control Type을 Vector2로 정하겠습니다.

그럼 입력 시 Vector2에 형식으로 받아오게 됩니다. 

 

 

▣ Movement에 + 버튼을 클릭하여 Add Up Down Left Right를 바인딩을 추가합니다. 

 

 

▣ 그리고 각각 키를 설정합니다. 

 

 

▣ 마우스 또한 Actions을 생성합니다. 

 

▣ Action Type 종류

 

▣  Value
이는 기본 작업 유형입니다. 컨트롤 상태의 지속적인 변화를 추적해야 하는 모든 입력에 대해 이를 사용합니다.
Value유형 작업은 작업에 바인딩된 모든 컨트롤을 지속적으로 모니터링한 다음 작업을 구동하는 컨트롤로 가장 많이 작동되는 컨트롤을 선택하고 값이 변경될 때마다 트리거 되는 콜백에서 해당 컨트롤의 값을 보고합니다. 다른 바인딩 컨트롤이 더 많이 작동하면 해당 컨트롤이 작업을 구동하는 컨트롤이 되고 작업은 해당 컨트롤에서 값을 보고하기 시작합니다. 이 프로세스를 명확성이라고 합니다. 이는 다양한 컨트롤이 게임의 작업을 제어할 수 있도록 허용하되 동시에 하나의 컨트롤에서만 입력을 받으려는 경우에 유용합니다.
작업이 처음 활성화되면 바인딩된 모든 컨트롤의 초기 상태 확인을 수행합니다. 그중 하나라도 작동되면 작업은 현재 값으로 콜백을 트리거합니다.

▣  Button
이는 와 매우 유사 Value 하지만 ButtonActions 유형은 Control에만 바인딩될 수 있으며 Actions ButtonControl처럼 초기 상태 확인을 수행하지 않습니다 Value(위의 값 섹션 참조). 누를 때마다 한 번씩 작업을 트리거하는 입력에 사용하세요. 이러한 경우 초기 상태 확인은 일반적으로 유용하지 않습니다. 작업이 활성화되었을 때 이전 누름에서 버튼을 계속 누르고 있으면 작업이 트리거 될 수 있기 때문입니다.

▣  Pass-Through
Pass-Through작업은 위에 설명된 작업에 대해 설명된 명확성 프로세스를 우회 Value 하고 작업을 구동하는 특정 컨트롤의 개념을 사용하지 않습니다. 대신 바인딩된 컨트롤을 변경하면 해당 컨트롤 값으로 콜백이 트리거 됩니다. 이는 컨트롤 세트의 모든 입력을 처리하려는 경우 유용합니다.

 

https://www.youtube.com/watch?v=DMUZfVSYJfs

 

▣ Action Type 종류 차이에 대한 유튜브 영상입니다.

참고해 주세요.

 

 

▣ 저장 후 PlayerInput에 Genrate C# Class를 클릭하고 Apply를 누르면 C# 스크립트가 생성됩니다. 

 

 

▣ Player 오브젝트에 Player Input컴포넌트를 추가하고 Actions에 아까 생성한 Input System을 넣습니다. 

Behavior을 Send Messages으로 선택합니다.

Default Map은 Player로 지정합니다. 

 

https://docs.unity3d.com/Packages/com.unity.inputsystem@1.0/manual/Components.html

 

GameObject components for input | Input System | 1.0.2

GameObject components for input The Input System provides two MonoBehaviour components that simplify how you set up and work with input: Component Description PlayerInput Represents a single player, and that player's associated Input Actions. PlayerInputMa

docs.unity3d.com

 

▣ Send Messages, Broadcast Messages는 특정 함수를 호출하는 방식이고 Invoke Unity Events, Invoke C sharp Events는 유니티 C#의 이벤트기능을 사용하는 방식이라고 생각하시면 됩니다. 

위에 API를 참고해 주세요.

 

 

▣ Send Messages : 특정키가 들어오거나, 특정한 함수를 자동으로 호출하는 방식입니다. 

함수명이 " On + Actions name"으로 구성합니다. 

 

 

▣ 플레이어 이동 및 마우스 회전 스크립트도 들어가서 InputSystem 네임스페이스를 추가합니다.

 

 

▣ 그리고 각각 함수를 정의합니다. 

On + "Actions name"을 붙여서 함수 생성하시면 됩니다.

InputValue value는  입력 시 매개변수에 값을 받습니다.

그리고 스크립트마다 각각 value.Get<Vector2>(); 제네릭 형식에 코드로 값을 받아와서 아까와 동일하게 이동하고 마우스를 회전하는 코드를 완성합니다. 

 

 

▣ 이 코드는 2D 기반으로 키에 따라 방향이 바뀌고 이동하는 코드입니다.

 

 

 

▣ 마우스 클릭에 대한 InputSystem을 추가하고 키를 누르면 총알이 복제되고 발사되는 코드를 추가했습니다. 

 

 

▣ Invoke Unity Events : Actions 키 입력이 되었을 때, 이벤트 함수 호출

 

 

 

728x90
반응형

댓글