일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- c#
- 인터페이스
- LINQ
- 메서드
- 유니티
- 프로그래머스
- BGM
- unity
- Generic
- 효과음
- 비선형자료구조
- ObjectPool
- soundmanager
- 장애물달리기
- delegate
- 직렬화
- 스파르타내일배움캠프
- inputsystem
- 자료구조
- 배열
- 코루틴
- InputManager
- invokec#events
- script
- UI
- 람다식
- 유한상태머신
- FSM
- 스택
- skybox
- Today
- Total
Unity 개발일지
[Unity] Invoke C# Events를 이용한 InputManager만들기 - 2 - 본문
이제 본격적으로 InputManager를 만들어보자.
[프로젝트 세팅하기]
Window - Package Manager - Unity Registry - Input System 검색 후 Install
먼저 Scene에 빈오브젝트 Player를 만들고, 프리펩을 넣어주었는데 핑크맨등장!
랜더파이프라인설정이 달라서 수정하는 작업부터 해주도록 하겠다.
Window - Rendering - Render Pipeline Converter - Convert Assets 클릭 - Initialize And Convert 클릭
현재 프로젝트가 URP라서 생긴 현상으로, Built-in을 URP로 전환해준다.
Player의 Material이 적용되어있는 Material파일을 클릭해보면 Built-In에서 사용하는 Standard로 되어있는데
적용해주고 난 뒤에는 Universal Render Pipeline/Lit으로
변경되어있는 것을 볼 수 있다.
이제 플레이어에 InputAction을 등록하고 ActionMap을 작성한다.
Player Input에 Behaviour를 Invoke C# Event로 설정 후
PlayerInput 파일을 보면 스크립트로 추출할 수 있다.
Apply를 눌러주면 스크립트파일이 하나 생성된다.
이 파일을 열어서 내용을 보면 Player Input과 우리가 작성한 ActionMap에 대한 내용을 스크립트로 추출한 것을
알 수있으며 콜백함수를 등록하고 제거하는 등의 정보들이 적혀있다. Send Message때 사용했던 OnMovement, OnLook등의 함수도 있는것을 볼 수있다.
[StateMachine 준비하기]
본격적으로 플레이어 움직임을 구현해보자.
우선 <PlayerController>를 작성한다.
그리고 Animation 재생을 위한 <PlayerAnimationData>를 작성한다.
PlayerAnimationData에는 Animation에대한 값들을 정의해주었으며, ParameterHash로 정수화하여 값을 적용했다.
@는 Layer로 들어가는 Parameter값이라는 의미로 Ground위에있다면 @Ground를 통해 Ground Layer로 들어간다.
ParameterHash는 Unity의 애니메이션 시스템에서 파라미터를 효율적으로 식별하기 위해 사용되는 정수값이다.
애니메이션 파라미터를 문자열로 직접 참조하면 성능저하가 발생할 수 있으므로 Animator.StringToHash매서드를 사용하여 파라미터 이름을 정수 해시로 변환하여 사용한다.
<Player> 스크립트를 작성한다.
Player 스크립트는 AnimationData등의 각종 값들을 받아오고 초기화한다.
스크립트들은 Player의 컴포넌트로 등록해주자.
Player Input 컴포넌트는 이제 필요없으니 없애주자.
Character Controller라는 컴포넌트를 등록한다.
Slope Limit(언덕제한) 등 다양한 옵션을 설정할 수 있다.
그 외에도
Animator, Player스크립트, PlayerController스크립트를
넣어준다. Animator에들어갈 Animator Controller도 만들어서 넣어놓자.
Player 스크립트에 AnimationData를 보면
설정한 값들을 볼 수 있는데 대소문자가 다르면
Hash값 오류가 뜨므로 철자확인을 잘하자.
플레이어의 움직임 관련 로직은 끝났다.
이제 <StateMachine>만 준비하면 이번 포스팅은 끝이다.
IState는 Gound, Air, Idle 등 각종 State(상태)들이 꼭 구현해야할 항목들을
정리해놓은 인터페이스이다.
StateMachine 스크립트에 같이 작성해주었다.
StateMachine은 추상클래스로 추후 작성할 파생 State들이 상속받아야 하는 기본 구조들을 정의해놓았다.
이번 포스팅에서는 FSM을 구현하기위한 기초 뼈대공사를 진행했다.
다음 포스팅에서는 StateMachine을 상속받을 State들을 작성하고 Animator Parameter값을 설정해서 실제로 움직이도록 구현해보자.
'Unity 개발' 카테고리의 다른 글
[Unity] Invoke C# Events를 이용한 InputManager만들기 - 4 - (0) | 2024.06.25 |
---|---|
[Unity] Invoke C# Events를 이용한 InputManager만들기 - 3 - (0) | 2024.06.19 |
[Unity] Invoke C# Events를 이용한 InputManager만들기 - 1 - (2) | 2024.06.14 |
[Unity] Generic Singleton(제네릭 싱글톤) (2) | 2024.06.13 |
[Unity] SoundManager로 간단하게 BGM과 효과음 넣기! - 1 - (1) | 2024.06.10 |