1-24 TIL /./ 새로운 프로젝트, PlayerInput

최보훈·2024년 1월 24일
0

TIL

목록 보기
16/28
post-thumbnail

S.A

  • 선정된 게임
    슈퍼 헥사곤 > 난이도가 있다고 생각했지만, 완성보다는 문제해결을 위주로 도전해보기로 결정!

  • 재해석 : 일정 주기마다 모든 벽이 다가오고, 벽마다 HP가 감소하거나 회복시켜주는 방식,

  • 구현 스케치

    • 벽(장애물) 생성

      • 6개의 면을 오브젝트로 각자 두고 중심으로 모이도록 하는 방법
      • 오브젝트 생성되는 주기를 정해서 어떤 면이 생성될지 on/off로 정해지게 한다.
      • 오브젝트를 관리하는 오브젝트 매니저 만들고 일정 딜레이마다 프리셋으로 오브젝트를 소환
      • 면마다 오브젝트 풀링을 가지고 벽을 활성화 / 수거하는 방식으로
      • 오브젝트 매니저가 생성할 변수를 가지고 있다
    • 면의 개수가 줄어들거나 늘어나는 기믹

      • 최소 목표는 정적으로 하고, 여유가 되면 동적으로 구현
      • 오브젝트 매니저의 작업자가 동적으로 되는 것도 염두에 두고 구현
    • 화면의 회전을 카메라로 할지 맵으로 할지

      ⇒ 카메라의 회전으로

    • 장애물 표현 방식

      • 매니저님들이 가운데로 모이는 방식 [색깔, 크기로 hp 변화]

      • 벽이 모이는 방식

        ⇒ 일단 벽이 모이는 방식으로

    • 조작

      • 키보드, 마우스 둘 다 사용
      • A,D / 좌클릭, 우클릭
    • 씬 로직

      • 시작 씬 → 메인 씬 → 종료 씬

      • 시작 씬 → 메인 씬

      • 메인 씬

        ⇒ 메인 씬 하나에서 모든 로직 처리하고 동작하도록

    • 충돌

      • Player 쪽에서 충돌 처리 → 체력 증감 구현 위해서
    • 게임 매니저

      ⇒ 게임 매니저에서 게임의 시작과 종료를 관리

    • UI

      • 좌측 상단 생존시간, 우측 상단에 최고기록과 스테이지 레벨 최고 기록이 나오면 “New Record” 출력
      • 기본 데이터, 메서드의 클래스를 만들고 상속하는 방향
    • 카메라

      회전 속도, 기울임, 회전 방향, 줌인 , 줌아웃


프로젝트 시작

문제

PlayerInput시스템을 이용해서 마우스 클릭 인풋을 받아 플레이어의 좌 우 이동을 조작하고자 하였다.
마우스를 클릭을 하면, 좌,우 클릭에 따라서 vector2가 다음과 같이 할당된다.
좌 클릭의 경우 (-1,0) 우 클릭의 경우 (1,0)
이 방법을 사용한 경우 좌우 이동은 잘 되지만, 클릭을 안할때 즉 플레이어가 가만히 있어야 하는 (0,0)상황의 초기화를 해주지 못하는 문제가 발생하였다.
= 플레이어가 멈추지 않고 계속 움직인다.

해결 방법

PlayerInput의 ActionType을 value로 하게되면 입력이 들어올때와, 입력이 끊길때 두번 Input이 실행 된다는 것을 알게 되었다.

 public void OnRightClick(InputValue inputValue)
 {
     Debug.Log(inputValue);
     Vector2 dirVec = Vector2.right;
    
     if (!inputValue.isPressed)
     {
         dirVec = Vector2.zero;
     }
     CallMoveEvent(dirVec);
 }

또한 InputValue인자를 통해서 inputValue.isPress를 이용해 누르는 경우, 떼는 경우 두 가지 경우를 나눠서 관리할 수 있다는 것을 알게되었고, 떼는 경우에 초기화를 진행해 주었다.

생겨난 아이디어

이게 오류라고 생각하면 고치는게 맞지만, 달리 생각해 보았다. 플레이어가 멈추지 않고, 계속 움직이는 스타일의 게임을 만들고 싶다면, 초기화를 해줄 필요 없이 수정 전의 코드를 이용하면 좋겠다고 생각하였다.

0개의 댓글