게임개발/Unity

24-08-19 [빗물받는 르탄이]

몰록 2024. 8. 19. 19:28

강의를 따라가며 위에서 떨어지는걸 받아먹거나 피하면서 점수를 올리는 간단한 게임을 만들었다.

그 과정에서 유니티를 활용하고 유니티에서 C# 스크립트를 적용시키는 방법을 익혔는데, 자세한 바는 다음과 같다.

 

1. 기본 씬 구성

 

이 파트에선 기본적으로 게임에 필요한 씬의 배경과 카메라 세팅, 해상도, 유니티 레이아웃을 조정하는법을 배웠다. 

또 프로젝트 폴더를 관리하고, 리소스를 어떻게 가져와서 활용하는지에 대해서도 훑어봤다.

 

이전에도 유니티를 자주 만져봐서 레이아웃이 전체적으로 낯설지는 않아 빠르게 잘 수행한것같다.

 

 

2. 에니메이션 맛보기

 

유니티 자체 컴포넌트인 에니메이터와 함께 2D 스프라이트 에니메이션이 어떻게 구성되는지를 대략 알아볼수 있었다.

이번 프로젝트에선 단 두가지 스프라이트가 반복되기 때문에 간단하지만, 또 더 복잡한 구성의 2D 스프라이트 에니메이션도 같은 방법으로 작동시킬수 있을것 같다. 

 

 

3. 캐릭터 움직이기 

 

이전에 Godot 엔진에서 캐릭터를 직접 움직일수 있게 스크립트를 짠적이 있었는데, 이번 프로젝트에서 캐릭터를 움직이는 스크립트는 더 컴팩트한 느낌이였다. 미리 방향(속도)함수를 만들어주고, 그 함수를 사용해서 상시적으로 움직이게 했다.

 

그리고 그 값을 상황에 따라 if문으로 변경해서, 화면 끝에 도달하면 방향을 바꾸고, 또 플레이어가 클릭하면 방향이 바뀌는 식으로 만들었다. 

 

여기서 Application.targetFrameRate = 60; 는 60프레임을 기준으로 삼는다는 뜻이다. 프로그램은 프레임 단위로 시간이 흐르기 때문에 이걸 맞춰주지않으면 기기 성능에 따라 시간이 들쭉날쭉해진다.

 

이걸 배우니 이전에 했던 게임 폴아웃76에 버그가 생각났다. 바닥을 보고있으면 랜더링할게 줄어들기때문에 프레임이 올라가고, 프레임이 올라가기때문에 이동속도가 증가했던 버그가 있었다. 멀티플레이어 게임인데도 기기 성능에 따라 이동속도가 달라지는 미친 버그가 이런 기초적인 설정의 부제 때문에 존재했다.............

 

 

 

4. 빗방울 - 코딩하기

 

이 부분부터 떨어지는 빗방울을 만들어주게 되는데, 시작은 간단하게 유니티에 내장된 물리엔진 기능으로 아래로 자연스럽게 떨어지게 하고, 빗방울과 기본 씬 구성에서 만들어둔 바닥에 콜리션(Collision)을 추가해서 서로 부딪히도록 했다.

 

그 뒤에 부딪히면 사라지게끔 코딩 하였는데, 그 방법이 정말 간단하다. 

 

유니티 에디터에서 바닥 오브젝트에 태그를 추가하고, 그 태그를 스크립트에 불러와줘서 구별시킨다. 그리고 그 태그에 맞는 오브젝트와 부딪혔을때 작동되는 if문을 작성하는것이다.

Rain.cs 파일에 해당 코드. CompareTag 뒤에 단순히 문자열을 적어도 알아서 구별한다

 

Destroy같은 편한 단어들을 사용할수 있어서 좋은것같다. 

 

5. 빗방울 - 랜덤성 

 

다음은 빗방울이 무작위 장소에서 스폰되도록 하는것. 화면에 있는 위치를 알아낸 후 Random.Range 로 매번 무작위로 스폰되도록 했다.

 

위치뿐만아니라 색과 크기도 랜덤으로 만들었는데, 크기별로 점수를 나눠주기 위해서인지 타입을 따로 만들어서 정의했다.

 

type 4는 숙제였는데, 이 빗방울 스크립트에 타입 하나만 추가되면 되는 부분이였다. 붉은 빗방울로, 맞으면점수가 되려 깎인다.

 

6. 빗방울 - 반복 생성 

 

여기서 중요한 기능이 등장한다, 바로 프리팹(Prefap)

 

씬에 있는 일반 오브젝트.
프리팹화된 오브젝트.

 

 오브젝트를 프리팹화하는건 간단하게, 씬 창(Hiearchy) 에서 프로젝트 폴더(Project) 쪽으로 오브젝트를 드래그엔 드롭 해주면 된다. 

이렇게 생성된 프리팹은 영구적인 데이터가 되어서 어느 씬에서도 어떤 스크립트로든 불러올수 있게된다.

 

이렇게 프리팹화 시킨 뒤에 이 비를 반복 생성시킬 오브젝트를 따로 만들었는데, 이런 오브젝트는 관행적으로 GameManager 라고 이름붙인다고 한다. 이런 관행적인 요소는  스크립트 작성할때 더 편해지는것 같으니 무조건 따라주자.

 

이제 GameManager 의 스크립트로 들어와서,

이렇게 프리팹을 불러와주고,

그 오브젝트를 인스턴스화하는 기능을 만들어주고(이런 정의는 스크립트 뒷부분에 해야한다고 한다),

게임 시작시 실행하고, 특정 주기로 반복하는 기능까지 넣어주면 끝!

 

 

7. 점수 올리기

 

다음은 게임의 점수 개념을 넣는건데, 여기서 본인은 한번도 안건드려본 UI를 만진다.

 

UI는 캔버스라는 개념으로 들어가고 그 안에 문자와 이미지를 추가하는 식이다. 

지금은 만들어둔 땅이 매우 간단한 방식이라 그게 ui 이미지를 겸하는 느낌이였다.

 스크립트 에선 점수 시스템은 ui를 먼저 불러와야 한다

이렇게

 

이렇게 ui text와 스코어를 연동해주면 된다. 

 

8. 게임 끝내기 

 

마지막은 시간이 다 지나면 게임이 끝나는 시스템

 

게임이 끝나면 출력될 ui

이렇게 ui를 미리 만들어두고 시간이 다 되면 게임이 멈추도록 해준다.

 

 

'게임개발 > Unity' 카테고리의 다른 글

24-08-22 [고양이 밥주기 게임 下 ]  (0) 2024.08.22
24-08-21 [고양이 밥주기 게임 上]  (1) 2024.08.21
24-08-20 [풍선을 지켜라]  (0) 2024.08.20
티라노는 못참아  (0) 2024.08.12
Unity 알아보기  (0) 2024.08.12