오늘은 팀 프로젝트 1일 차이다. 팀원들과 회의 끝에 구현할 기능들을 나열해 보니 생각보다 할만한 것 같아서 블록 깨기 게임을 선택했다.
가장 먼저 Ball과 Paddle의 움직임을 구현하면서 여태 외워서 썼지만 잘 이해하지 못했던 개념들을 이해할 수 있는 시간이었다.
Ball이 Paddle에 닿았을 때 Mouse 커서 방향으로 Ball이 향하도록 게임 방식을 설정했는데, 이때 Input System을 통해서 MouseCursor의 Position 값을 받아오게 끔 설정했다.
기존에 TopDownViewGame을 만들 때처럼 Action이 실행될 때 InputValue를 받아와서 Vector2로 값을 받고, camera.ScreenToWorldPoint(Vector2 InputValue)를 통해서 월드 좌표 값을 가지고 온다.
그리고 월드 좌표에서 - (Vector2)Object.Position을 통해 Object에서 (Vector2)MouseCursor로 향하는 Vector 값을 생성해 준다. 이때 Vector2가 똑같은 크기를 가지게끔 normalized를 해준다.
마지막으로 Event를 호출하고 Event가 호출됐을 때 실행할 함수를 넣어준다.
이때 미처 몰랐었던 게 InputSystem에서 Action으로 받아오는 Mouse의 좌표, 즉 InputValue가 Update처럼 작동이 되는 건 줄 알았었는데 Action이 동작이 될 때 작동된다는 것을 깨달았다.
그래서 Mouse를 움직이지 않고 가만히 둔 상태에서 다음 충돌이 일어날 때 Vector2의 값이 갱신되지 않은 상태로 진행됐다.
일단은 Ball이 Paddle에 닿을 때 Mouse를 움직여서 갱신시켜주고 있지만, 방금 이걸 쓰다가 해결해버렸다..!
InputValue를 받아오고 나서 WorldPosition 값을 받아오는 것은 그대로 진행을 하고, Action이 발생됐을 때 BallMovement를 관리하는 곳에서 worldPos를 받아온다.
그리고 Ball과 Paddle의 충돌이 일어날 때 OnCollisionEnter2D를 통해서 layer가 Paddle이 맞다면, 그때 받아왔던 worldPos에서 Ball의 (Vector2)Position 값을 빼준 뒤 normalized 해주면 다음 충돌 때도 worldPos는 그대로 있고, Ball의 (Vector2)Position은 갱신되기 때문에 마우스 방향으로 잘 가게 된다.
'내배켐 Unity TIL' 카테고리의 다른 글
Unity 26일차 TIL - Unity 팀 프로젝트 3 (RigidBody 2D) (0) | 2024.05.20 |
---|---|
Unity 25일차 TIL - Unity 팀 프로젝트 2 (GetComponent<>) (0) | 2024.05.20 |
Unity 23일차 TIL - Unity Canvas (0) | 2024.05.14 |
Unity 22일차 TIL - Unity 2D 프로젝트2 (0) | 2024.05.13 |
Unity 21일차 TIL - Unity 2D 프로젝트1 (0) | 2024.05.10 |