[유니티 기초] 기분 좋은 터치 감각 (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의

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





[알고리즘 기초][구현] X보다 작은 수, 윷 놀이 (백준)


백준 사이트에서 단계별로 풀어보기를 하다가

구현이라는 단계의 몇 문제를 풀어 보았다.

알고리즘 기초 중의 기초 문제인 듯 하다.




01. X보다 작은 수






02. 윷놀이





간단 알고리즘 기초 문제를 풀어 보았다.

오랜만에 알고리즘 문제를 풀어서 쉬운 문제를 골랐는데

음.. 너무 쉬운 문제를 골랐나..?




[자료구조] 이진 트리의 이해


연결 리스트는 대표적인 선형 구조의 예이다.

오늘 포스팅할 이진 트리는 비선형 구조의

대표적인 예라 할 수 있겠다.




일단 이진 트리는 

1. 배열 기반

2. 연결 리스트 기반

으로 나눌 수 있는데 연결 리스트 기반으로 알아보자.


이진 트리에 들어가기 앞서 알아둘 내용은

1. 2개의 자식 노드를 가질 수 있다는 점과

2. 하나의 노드도 이진 트리라는 점이다.

자식 노드가 없는 노드는 공집합 노드를 가지게 되는데

자식이 하나 혹은 하나도 없는 노드 또한 이진 트리라고

기대할 수 있게 하기 위함이라고 한다.




이진 트리를 표현한 구조체



헤더 파일에 선언된 함수들



구현



예시




짚고 넘어가야할 부분

구현 부분의 MakeLeftSubTree() 함수를 보면

추가하려는 자리에 기존 데이터가 있으면

삭제하고 대체하게 되는데 이 과정에서


삭제하려는 노드의 서브트리가 존재하게 되면

메모리 누수로 이어지게 된다.


이 해결책으로 순회라는 방법이 있는데

다음 포스팅에 계속 이어 가보도록 하겠다.


이진 트리를 이해하기 위해 간단한 구현을 해보았다.

앞으로 이진 트리에 대한 어마어마한 내용이 남아 있기 때문에

꼭 마스터 하고 넘어가도록 하자.







+ Recent posts