[유니티 기초] 기분 좋은 터치 감각 (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의
차이점을 알아보고 활용 예에 대해서 알아보겠다.
'C#, 유니티' 카테고리의 다른 글
| [C#] Func 델리게이트, Antion 델리게이트 (0) | 2017.07.01 |
|---|---|
| [유니티 기초] mesh에 대해서 (0) | 2017.06.29 |
| [C#] 가비지 컬렉터 (Garbage Collector) 원리, 동작 메커니즘 (0) | 2017.04.03 |
| [C#] C/C++/C# 메모리 할당과 가비지 컬렉터 (0) | 2017.04.03 |
| [C#] string 그리고 가비지 컬렉션 (0) | 2017.03.29 |