08
15
  • 해당 글은 골드메탈님의 물리 퍼즐 게임 강좌를 참고하여 작업을 진행한 것입니다.

 

오브젝트 랜덤 생성

오브젝트를 랜덤하게 생성이 가능하도록 작업을 진행한다. 총 0~7까지의 크기와 이미지 별로 생성이 가능하도록 한다.

오브젝트가 생성 될때 그냥 생성되면 뭔가 심심한 느낌이 있어 뿅하고 나타나는 느낌을 주기 위해 애니메이션을 넣어준다.

프레임 설정 & 물리보정

기존에 작업을 진행하다보면 프레임이 너무 크게잡힌다. 나중에 모바일로 플레이 할 시 문제가 생길 수 있어 프레임을 고정해줘야 된다.

Application.targetFrameRate = 지정숫자;

해당 코드를 Awake() 안에 넣어주자, 그래야 실행되기 전에 프레임을 고정시켜준다.

 

따로 알아보니 모바일 최적화로 기본적으로 30fps를 설정해준다한다. 60fps는 기기의 한계까지 밀어붙여 배터리 수명이 빨리 소모될수 있다고한다.

 

-> 30fps하니까 좀 매끄럽지 않아서, 60fps로 수정

 

전에 만들어둔 Dongle 프리팹으로 이동하여 Rigidbody 2D의 Interpolate를 조정한다.

Interpolate는 이전 프레임을 비교하여 움직임을 부드럽게 고정시켜주는 역할을 한다고 한다.

자세히 알아보기 위해 검색을 돌리니 물리 계산으로 인해 소비되는 CPU자원을 아끼기 위해 물리 프레임의 속도를 렌더링 프레임보다 더 낮게 생성할 경우 툭툭 끊어지는 현상을 잡아주기 위한 옵션이라한다.

 

Interpolate 옵션은 두가지.

 

Interpolate

렌더링 프레임의 현재시점에서 이전 물리 프레임과 다음 물리프레임(예측)의 사이 값을 찾아서 선형보간을 수행한다.

이를 위해 이전 물리 프레임의 값을 계속 어딘가에 저장해두어야 한다.

엔진은 선형보간된 위치와 회전값으로 Transform정보를 강제로 설정한다.

 

Extrapolate

렌더링 프레임의 현재 시간과 이전 물리 프레임시간을 뺀 델타 시간을 구한뒤에 현재 Rigidbody가 가지고 있는 속력에 이를 곱해 최종 위치를 예측한다.

이것또한 엔진은 예측된 위치와 회전값으로 Transform 정보를 강제로 설정한다.

 

Interpolate 설정은 공짜가 아니다. 옵션을 설정하는 순간 해당 Rigidbody는 별도로 관리되며, 렌더링 프레임마다 이들에 대한 보간 연산이 추가적으로 일어나게 된다.
두가지 방법을 선능의 관점에서 비교하자면 Extrapolate가 추가적인 정보의 저장이 없고 속력에 시간을 곱하는 단순한 연산을 수행하므로 조금이나마 부하가 덜하다.
이옵션은 강제로 위치를 조절하기 때문에 충돌과는 아무런 관련이 없다. 따라서 충돌까지 고려한다면 충돌처리의 CCD옵션도 같이 켜주는것이 바람직 하다.

 

여튼 Interpolate 옵션에서 Interpolate로 설정해준다. 무거운 게임은 아니라서, Interpolate로 설정해도 그렇게 많은 부하는 없을 것 같다.

 

오브젝트 합치기

같은 오브젝트 끼리 부딪히면 다음 단계의 오브젝트가 생성이 된다.

조건은 서로 같은 레벨의 오브젝트 and 서로 부딪히고 있는 상태

여기서 랜덤 생성 조건을 최대 레벨을 설정하여, 처음 생성될 때는 0~1레벨이 생성되지만 플레이하면서 오브젝트의 레벨이 상승할 수록 랜덤 생성되는 레벨이 해금되게 설정

 

작업후기

하루~이틀 안에 골드메탈님 강의를 전부 완료하고 빨리빨리 다음 게임으로 넘어가자

'유니티 > 게임 개발 일지' 카테고리의 다른 글

작업일지_5  (3) 2023.05.31
오랜만에 적는 작업일지_4  (4) 2023.05.29
03. 작업일지_3  (1) 2022.10.13
01. 작업일지_1  (0) 2022.08.10
00. 기획  (1) 2022.07.26
COMMENT