오늘 학습 키워드
개인 프로젝트 해내기
오늘 학습 한 내용을 나만의 언어로 정리하기
필수 기능
기본 이동 및 점프
- 저번에 스탠다드반 Input System에서 배운 Auto Generate 써보기로 함
- 완성
체력바 UI
- 실습 때와 동일하게 진행
- 대신에 챌린지반 디자인 패턴에서 따온 Event Bus를 써보기로 함
- 체력, 허기, 스태미나를 Observable<T>로 한 번 감싸서 만듬
- 그리고 Event Bus에 쓰이는 키를 Constant로 따로 만듬
동적 환경 조사
// PlayerController.cs
private void Start()
{
// 여기 있는게 너무 맘에 안드는데 방법이 없나...
// 생성 순서 때문에 어쩔 수 없이 여기다 뒀는데 너무 거슬림
playerInput.Player.Interact.started
+= PlayerManager.Player.interaction.OnInteraction;
Cursor.lockState = CursorLockMode.Locked;
}
private void OnEnable()
{
playerInput = new();
playerInput.Player.Move.performed += OnMove;
playerInput.Player.Move.canceled += OnMoveStop;
playerInput.Player.Jump.started += OnJump;
playerInput.Player.Look.performed += OnLook;
playerInput.Player.Look.canceled += OnLookStop;
playerInput.Player.Enable();
playerInput.Change.Enable();
}
- 맘에 안드는데 일단 저기다 둠
점프대
- 대충 작성 완료
아이템 데이터
- SO로 관리
- 인벤토리 만들기
학습하며 겪었던 문제점 & 에러
문제 1
- 문제&에러에 대한 정의
Image Type이 안떴었다
- 내가 한 시도
2D Sprite를 깔고 다시 해봤다
- 해결 방법
알고보니 Source Image에 넣으면 해결됨
- 이 문제&에러를 다시 만나게 되었다면?
일단 할당을 해놓고 생각하자
문제 2
- 문제&에러에 대한 정의
IInteractable 이 null 이었다.
- 내가 한 시도
디버그를 찍어봤는데, GameObject는 잡히는데 IInteractable이 안잡혔다.
- 해결 방법
설마 하고 보니 실제로 모델링이 잡혀있고 콜라이더가 있던 자식 오브젝트만 잡아서 부모 오브젝트에 달려있는 IInteractable이 안잡혔던 것
- 새롭게 알게 된 점
hit.collider는 진짜 콜라이더가 있는 그 객체를 찾기 때문에 부모에다가 뭐 두면 GetComponent로 못찾아온다.
- 이 문제&에러를 다시 만나게 되었다면?
콜라이더는 부모에 두자..
문제 3
- 문제&에러에 대한 정의
딸기밭 팀플에서 입력 옵션을 만들고 있는데 Input Action Map에 따라 알아서 입력 옵션이 나타나게끔 만들려고 했음 근데 그게 잘 안됐음
- 내가 한 시도
챗지피티에게 도움을 요청함
- 해결 방법
private void ShowBindings(InputAction action)
{
if (action.bindings.Count > 1 && action.bindings[0].isComposite)
{
// Composite (예: 2D Vector)
for (int i = 0; i < action.bindings.Count; i++)
{
if (action.bindings[i].isComposite) continue; // "2D Vector" 같은 Composite 헤더는 스킵
string partName = action.bindings[i].name; // "Up", "Down", "Left", "Right"
string keyName = action.GetBindingDisplayString(i); // W, S, A, D
Debug.Log($"{action.name} - {partName}: {keyName}");
}
}
else
{
// 단일 바인딩
Debug.Log($"{action.name}: {action.GetBindingDisplayString()}");
}
}
- 새롭게 알게 된 점
Composite는 합성 바인딩이라는 의미. 여러 개의 하위 입력을 합쳐서 하나의 액션 값으로 만드는 것을 합성 바인딩이라고 함. Move(WASD)의 경우에는 W, A, S, D 하나 하나를 입력받아서 Vector2 형태로 반환하는 방식임. 따라서 Move는 합성 바인딩임. 합성 바인딩 안에 있는 하위 요소를 하나 하나 출력해 주어야 함.
- 이 문제&에러를 다시 만나게 되었다면?
isComposite로 분류하자.
내일 학습 할 것은 무엇인지
인벤토리 만들기 끝내고 도전과제도 최대한 해보기