[유니티 기초] 기분 좋은 터치 감각 (physic material , gravity)


오늘은 유니티로 간단한 게임을 만들어 보면서

액션 게임의 기본이 되는 기분 좋은 터치 감각을

어떻게 줄 수 있을까에 대해 알아보도록 하겠다.


매우 심오한 내용은 아니지만

하나의 '아이디어 출발점'은 될 수 있을 것이다.

대작 게임도 이러한 작은 아이디어에서 출발한다.




오늘 만들어볼 게임은 날아오는 공을

받아쳐서 '기분 좋은 터치감'으로 넘겨 버리는 게임이다.

왼쪽에서 초록색 공이 포물선을 그리면서 날아오고

빨간색 플레이어가 그 공을 받아쳐서 넘기면 된다.

간단한다.


01. 공이 포물선을 그리며 날아온다




02. 플레이어와 접촉




03. 기분 좋게 날려 버리기~




소스 코드는

player, ball, launcher 이렇게 세가지로 나뉜다.


01. Ball

생성과 동시에 Rigidbody의 velocity 메소드에 의해

포물선을 그리면서 날아가게 된다.


새로 배운 내용

void OnBecameInvisible()

오브젝트가 화면 밖으로 사라졌을 때 호출되는 함수이다.


02. Launcher

A키를 눌렀을 때 ballPrifab이 생성된다.


음.. 하지만 이 코드는 A키를 누를 때마다

Ball을 동적 생성하고 있으며, Ball스크립트를 보면

화면 밖으로 Ball이 사라졌을 때 해제를 해주고 있다.




동적 생성/해제는 추가적인 메모리를 필요로 하기 때문에

되도록이면 동적 생성/해제가 빈번하게 일어나는 오브젝트는

오브젝트 풀로 관리를 하는 것이 좋다. (후에 더 자세히 살펴보자.)



03. Player

is_landing --> 이단, 삼단 ... 점프를 방지하기 위한 플래그

A키를 누르면 플레이어가 점프를 하게 되는데

공중에 떠있어도 계속 점프를 하게되는 상황이 발생한다.


Floor에 접지되었을 때만 점프가 가능하게 해야한다.

플레이어의 점프 또한 Rigidbody의 velocity 메소드 사용.




새로 배운 내용

1. Debug.Break() -> 일시정지 시킨다.

간단한 디버깅을 할 때 Debug.Log를 자주 사용했다.

이와 비슷하게 Debug.Break()도 디버깅에 유용하게 쓰일 듯 하다.


2. Rigidbody --> mass

Ball이 플레이어와 접촉 했을 때,

두 오브젝트 모두 축축 쳐지는 느낌이 있었다.

이 미니게임의 목표는 '기분 좋은 터치감'이다.

경쾌하게 타격하여 공을 넘기는 것이 목표이다.


mass는 오브젝트의 무게를 설정하는 항목이다.

공의 무게가 너무 무거워서 접촉과 동시에

플레이어가 급하강 하는 모습을 볼 수 있다.

때문에 공의 mass를 0.01로 설정, 즉 공의 질량을

작게 하였으므로 플레이어는 공과 충돌해도 그대로 상승한다~


3. physic material

mass를 통해 질량을 달리하였다해도

'기분 좋게' 튕겨나가는 모습은 보이지 않는다.


physic materal을 공에 추가해 보도록 하자.

이렇게 생긴 놈이다.





Friction은 마찰에 대한 항목

Bounciness는 수치가 클수록 오브젝트가

쉽게 튀어오를 수 있도록 한다.




이로써 포물선을 그리며 날아오는 공을

플레이어가 경쾌하게 받아 쳐 넘길 수 있는

'기분 좋은 터치감'을 가진 게임을 만들어보았다.


간단한 구현이라도 큰 게임의 핵심 요소가 될 수도 있기 때문에

차근차근 하나씩 쌓아나가야 할 것이다.




다음에는 Rigidbody의 Velociy와 AddForce의

차이점을 알아보고 활용 예에 대해서 알아보겠다.





+ Recent posts