본문 바로가기

내배켐 Unity TIL

Unity 24일차 TIL - Unity 팀 프로젝트 1 (마우스 Position)

오늘은 팀 프로젝트 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은 갱신되기 때문에 마우스 방향으로 잘 가게 된다.