2024. 5. 24. 21:07ㆍ나의 개발자 기록/본 캠프 개발 일지
2024년 5월 24일 금요일
개발 일지
오늘은 아침에 분반별 해설이 올라와서 시간이 되는 대로 풀이를 보며 공부를 진행했습니다. 그리고 10시에는 유니티 숙련 주차에 대한 발제를 시작했는데, Unity의 3D 물리 처리와 UI, 그리고 게임 로직 및 상태 관리 등에 대해 배우는 것이 학습 목적이었습니다.
그다음에는 조가 바뀜에 따라 새로운 팀원분들을 만나서 팀 노션 페이지에 조의 이름과 규칙 등등 다양한 이야기를 하면서 시간을 보냈고, 얼추 준비가 되고 나서는 다들 어제 지급받은 강의를 듣고 개인 공부를 시작하였습니다.
저는 일단 입문 주차에 대한 내용들 중 이해를 못하고 넘어간 것이 좀 있어서 송지원 튜터님께서 준비해 주신 마무리 특강을 들었습니다. 강의 내용에는 GetComponent와 싱글톤에 대한 내용, 그리고 Input System에 대한 내용도 있었고, 개인적으로는 약간 부족한 점이 있었기 때문에 강의 내용이 많은 도움이 되었던 강의였습니다. Input System에 대해서는 하단에 간단하게 남겨볼 생각입니다.
오후에는 스탠다드 반 특강으로 객체 지향 설계에서 좋은 코드를 작성하기 위한 SOLID 원칙을 직접적으로 간단한 예제들을 통해서 설명해 주셨습니다. 약 2시간 반 동안 안 좋은 예시와 좋은 예시를 보여주시면 설명해 주시니까, 다는 아니지만 어느 정도는 감을 잡을 수 있을 정도로 명특강이었고, 어제 간단하게 써봤지만 각각의 원칙의 구체적인 내용은 나중에 써보도록 하겠습니다. 그렇게 강의가 끝나고 저녁을 먹은 후, 1시간 정도 지급받은 강의를 듣다가, TIL 쓰며 오늘 하루를 마무리했습니다.
Input System에 대해서
Input System 이란?
- Input System은 유니티에서 사용자 입력을 처리하기 위해 제공하는 패키지이다.
- 기존의 UnityEngine.Input 클래스를 대체하여 더 유연하고 확장 가능한 입력 처리를 제공한다.
- 이를 통해 키보드, 마우스, 게임패드, 터치스크린 등 다양한 입력 장치를 쉽게 통합할 수 있다.
주요 특징
1. 더 나은 이벤트 기반 입력 처리 : 입력 이벤트를 직접 처리하는 것이 가능하며, 이를 통해 코드의 복잡성을 줄이고, 가독성을 높일 수 있다.
2. 입력 맵(Input Map) : 입력 맵을 사용하여 다양한 입력 장치의 입력을 논리적 액션으로 매핑할 수 있다.
3. 멀티 플레이어 지원 : 플레이어 인풋(Player Input) 컴포넌트를 사용하여 멀티 플레이어 환경에서 입력을 쉽게 처리할 수 있다.
4. 디버깅 및 시각화 도구 : 입력 시스템에서 제공하는 디버깅 도구를 통해 입력 이벤트를 실시간으로 확인하고 문제를 해결할 수 있다.
설정 및 사용 방법
1. 패키지 설치
- 유니티 에디터의 패키지 매니저를 통해 Input System 패키지를 설치한다.
(1) 패키지 매니저 열기 : 'Window → Package Manager'를 클릭한다.
(2) Input System 검색 및 설치 : Packages를 Unity Registry로 변경 후, 검색 창에 "Input System"을 입력하고 패키지를 설치한다.
- 설치가 완료되면, 유니티가 기존의 Input Manager에서 새로운 Input System으로 전환할 것인지 묻는 팝업이 나타난다.
'Yes'를 선택하여 프로젝트를 재시작한다.
2. Input Actions 에셋 생성
입력 액션을 정의하는 에셋을 생성한다.
(1) Input Actions 에셋 생성 : 프로젝트 창에서 'Create → Input Actions'를 선택한다.
(2) 컨트롤 기기 추가 : 생성된 Input Actions 에셋을 더블 클릭하여 열고 'No Control Scheme'을 클릭 후, 'Add Control Scheme...'를 클릭 한다. 그다음에 사용할 기기의 이름을 입력한 뒤, '+' 버튼을 눌러 오른쪽 마우스로 Keyboard를 추가한다. (왼쪽 클릭 안먹힘.)
(3) 액션 맵 및 액션 추가 : 액션 맵(Action Map)을 추가한 후, 각 액션(Action)을 정의한다. 이동을 위해서 Value로 변경 후, Vector2로 바꿔준다.
(4) 바인딩 추가 및 설정 : Move 액션의 오른쪽 작은 '+' 버튼을 눌러 Up, Down, Left, Right Composite를 추가해준다. 그리고 각각의 Path에 이동과 관련된 키보드 Key를 넣어준다.
3. Action에 대한 스크립트 작성
생성한 Input Action 에 대한 각 액션들을 스크립트에서 사용한다. 하단은 Input System의 Send Messages를 이용한 간단한 이동 로직이다.
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
private Rigidbody2D rb;
private void Start()
{
rb = GetComponent<Rigidbody2D>();
}
public void OnMove(InputValue value)
{
Vector2 moveInput = value.Get<Vector2>();
rb.velocity = moveInput * 5f;
}
}
4. Player Input 컴포넌트 사용
Player Input 컴포넌트를 사용하여 입력 처리를 쉽게 설정할 수 있다.
(1) Player Input 컴포넌트 추가 : Player GameObject에 Player Input 컴포넌트를 추가한다.
(2) Input Actions 에셋 할당 : Player Input 컴포넌트의 Actions 필드에 생성한 Input Actions 에셋을 할당한다.
(3) Behavior 설정 : Behavior 필드를 통해 입력 처리 방식을 설정한다. (Send Messages, Unity Events, Invoke C# Events 등).
(4) 스크립트 추가와 Rigidbody2D 추가 : 위의 간단한 이동 로직 스크립트를 추가 한 후, Rigidybody2D도 추가하여 Gravity Scale을 0으로 만들어준다.
- 인풋 시스템 설명을 위해 Player 스크립트 하나에 간단하게 추가했지만, 원래는 SOLID 원칙을 최대한 지키면서 플레이어의 입력과 행동 부분은 나눠서 만들어야 한다. Input System의 다른 응용과 Behavior의 다른 방식들은 다음 기회에 써볼까 한다.
'나의 개발자 기록 > 본 캠프 개발 일지' 카테고리의 다른 글
2024년 5월 28일 화요일 개발일지 / TryGetComponent에 대해서 (0) | 2024.05.28 |
---|---|
2024년 5월 27일 월요일 개발일지 / GetComponent에 대해서 (0) | 2024.05.27 |
2024년 5월 23일 목요일 개발일지 / 팀 프로젝트 발표와 회고, SOLID 원칙에 대해서 (0) | 2024.05.23 |
2024년 5월 22일 수요일 개발일지 / 끝나가는 팀 프로젝트와 제출해야 할 것들 (0) | 2024.05.22 |
2024년 5월 21일 화요일 개발일지 / 오늘 있었던 일과 Trouble Shooting (0) | 2024.05.21 |