일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 유한상태머신
- Generic
- 유니티
- skybox
- 배열
- UI
- 람다식
- LINQ
- 비선형자료구조
- 스택
- FSM
- 직렬화
- 효과음
- 인터페이스
- c#
- 스파르타내일배움캠프
- InputManager
- unity
- delegate
- ObjectPool
- 프로그래머스
- soundmanager
- script
- 자료구조
- BGM
- invokec#events
- inputsystem
- 장애물달리기
- 코루틴
- 메서드
- Today
- Total
Unity 개발일지
[Unity] 3인칭 시점 구현하기 본문
Input System에서 Action Move와 Look을 등록해주었다.
(Input System은 Window - PackageManager에서 임포트해주어야한다.)
Player의 PlayerInput 컴포넌트에
InputAction을 넣어주었다.
Behaviour는 Invoke Unity Events 형식을 사용할 것이다.
Button처럼 Event를 등록하는 방식이다.
Player를 만들어주었고 Capsule 모양의 object를 만들어주었다.
CameraContainer를 만들어 Main Camera를 안에 넣어주었다.
[구현계획]
1. Player 스크립트를 만들고 필요한 값들을 선언한다.
2. CharacterManager를 싱글톤으로 만들고, Player에 접근해서 get, set해줄 수 있도록 한다.
3. PlayerController를 만들어 실제 움직임을 구현한다.
일단 Player, CharacterManager, PlayerController 스크립트를 만들자.
[Player스크립트]
플레이어를 간단하게 선언해준다.
[CharacterManager스크립트]
싱글톤으로 static으로 선언했으며
내부에서 접근할 때에는 _instance, 외부에서 접근할때는 Instance로 접근할 수 있게 해주었다.
방어기제로 CharacterManager가 없어도 자동으로 생성되어 들어갈 수 있도록 해주었다.
Player로 get, set 해줄 수 있도록 프로퍼티를 만들어주었다.
_player와 Player를 둘 다 변수로 선언하는 것은 C#의 관례 중 하나이다.
이것은 일종의 "Backing Field" 패턴으로, 주로 프로퍼티를 구현할 때 사용한다.
일반적으로 _player는 프로퍼티 Player의 백업 필드로 사용되고, 프로퍼티를 통해 외부에서 _player에 접근하거나 값을 설정할 수 있다.
보통 프로퍼티를 통해 값을 가져오거나 설정할 때 필요한 로직을 추가하기 위한 용도로 사용한다.
즉, _player는 내부적으로 사용되는 변수로, 외부에서는 프로퍼티 Player를 통해 접근할 수 있다. 이러한 패턴은 클래스의 내부 로직을 더 잘 캡슐화하고, 외부에서 클래스를 더 쉽게 사용할 수 있도록 도와준다.
[PlayerController]
Movement와 Look에 필요한 변수들을 선언해주었다.
Awake에서 Rigidbody와 cameraContainer를 구독했다.
Mouse를 회전시켜야하므로
Start에서 CursorMode.Locked으로 해주었다.
Move()
canLook 상태일때만 CameraLook이 작동하도록 설정해
추후 인벤토리를 구현할 때를 대비했다.
Move 구현
CameraLook 구현
좌우 회전시에는 Player의 mouseDelta.x 값을 그대로 가져왔지만
위아래 회전을 할 때에는 cameraContainer를 회전시켰다.
카메라 컨테이너가 Player의 주위를 공전하는 것 처럼 구현해야하기 때문.
카메라 컨테이너와 카메라를 돌려보며 Player의 주변을 공전하는지 확인해보자!
스크립트 작성은 끝났고, 유니티에서 값을 설정해주면 되겠다.
Rigidbody에서 Mass를 20으로 설정해주었다.
(추후 Jump 고려)
Player 오브젝트를 등록한 후 OnMove와 OnLook을 등록한다.
값이 없는 것들은 Start 시 값을 넣도록 설정해 주었다.
(Condition은 체력 및 스태미나 구현을 위해 넣어준 것)
Move Speed는 5로 설정
MixXLook과 MaxXLook 그리고 LookSensitivity를 설정해주자.
카메라를 플레이어의 뒤쪽 위에서 찍도록 값을 조정해주었다.
잘 움직인다!