이 프로젝트는 'Flappy Bird' 이후 'Flappy Bird'을 구현할 때 사용한 에셋들을 이용해 매우 비슷한 게임인 'Angry Bird'의 가장 기본적인 방식을 구현해본 것이다.
프로젝트 설명:
'Angry Bird'를 구현할 때 가장 중요한 것은 바로 타겟인 새(Bird)에 가해지는 힘(Force)에 대한 측정과 폭탄의 움직임 제어이다.
폭탄의 움직임은 새총을 뒤로 얼마나 당기는지 그리고 새총을 어떤 각도에서 발사하는지가 결정하게 되는데, 새총의 중심을 기준으로 원을 그려 폭탄으로 하여금 일정 거리 이상 뒤로 이동할 수 없도록 제한했다. 또한, 새총의 중심으로부터 얼마나 폭탄이 떨어져 있는지를 계산해 새총이 발사될 때 폭탄이 갖는 초기 속도를 부여해주었다. 폭탄이 새총에서부터 벗어난 뒤로는 폭탄의 움직임을 구현하는 것은 매우 쉬워지는데, 단순히 'RigidBody' 컴포넌트를 각각의 폭탄에 적용해 중력의 영향을 알아서 받도록 구성하면 되기 때문이다. 이후 폭탄은 새, 장애물, 또는 폭탄이 맵 밖으로 이동하지 않도록 만들어둔 가상의 벽과 같은 'Collider'를 갖는 물체들과 충돌하거나, 설정되어 있는 공기 저항을 비롯한 마찰력들의 영향으로 움직임이 자체적으로 변하게 된다.
다음으로 새(Bird)에 가해지는 힘을 측정하는 것이 중요한데, 만약 새가 조금의 외력을 감지했을 때 터지도록 구성하면 게임이 너무 쉽게 클리어되는 현상이 발생한다. 이에 새로 하여금 일정 수준 이상의 힘을 받아야 터지도록 구성해 플레이어로 하여금 폭탄이 새에 직접 충돌하도록 세심하게 에임을 조절해야 하는 이유를 부여해주었으며, 조금 더 지능적으로 게임을 플레이할 수 있도록 구성했다. 이를 구현하기 위해 지속적으로 새의 운동 에너지(Kinetic Energy)를 계산했다. 새는 초기 상태에서 정지해있기 때문에 운동 에너지가 0인 상태이다. 즉, 새가 운동 에너지를 갖게 되는 경우는 외부의 물체에 의해 충돌이 발생한 경우이기 때문에, 새의 속도를 지속적으로 측정해 1/2*mv^2 공식을 통해 운동 에너지를 계산해, 임계점을 넘으면 새가 폭발하도록 구성했다.





시연 영상:
실제 결과물:
마무리
이전까지는 Unity에서 미리 개발해둔 여러 수학적 함수들이나 컴포넌트를 이용했기 때문에 물리적인 연산을 직접할 필요가 없었다. 이에 학교에서 배운 물리적 지식들을 직접 활용하거나, 유니티를 통해 직접 확인해볼 수 없었는데, 원하는 상황을 구현하기 위해 물리적 지식을 처음으로 사용해본 프로젝트였다. 물론 프로토타입에 불과하기 때문에 구현도 간단했으며 게임의 형태도 매우 조잡하지만, 이러한 경험들이 쌓여 나중에 정말 중요하고 큰 프로젝트를 제작할 때 도움이 될 것이라고 생각한다.