Unity 알아보기, [PONG] 게임 개발 맛보기, [TopDownShooting] 프로젝트 세팅

유승아·2024년 5월 8일

내일배움캠프

목록 보기
38/69

1. Unity 설치 및 소개

TopDownShooting 게임을 만들어 보자.

어떻게 하면 2D 콘텐츠를 설계하고 개발할 수 있는지~
컴포넌트 익히는 것부터 시작해서 어떻게 활용할 것인지까지 전반적으로 배워볼 수 있는 시간을 가질 것이다.

Unity Hub
여러 버전을 쉽게 설치하고, 관리할 수 있도록 돕는 툴

우리가 설치할 버전은 2022.3.17f
LTS(Long Term Support) : 오랜 기간 동안에 걸쳐 안정성과 보안 패치를 제공하는 정책 또는 버전

게임 엔진
게임을 개발할 수 있도록 다양한 기능을 제공하는 프로그램

Unity의 특징
다양한 플랫폼에서 실행 가능한 게임 개발(크로스플랫폼)
사용자 친화적인 인터페이스와 강력한 기능 제공

Unity의 구조
C++로 구성된 코어 엔진을 연결해주는 C# 구현부가 있고, 여기에 C# 언어를 통해 스크립트를 작성하는 방식

모바일과 VR에 굉장히 강력한 메리트

meta data
버전마다 이 파일에 대한 기준 정보 같은 것들을 갖고 있다.
기준 정보들이 조금 조금씩 달라진다.

버전이 나올 때마다 업데이트를 하게 되면 meta 파일들이 엄청 꼬이게 된다.
그러다 보면 나중엔 오류가 정말 많이 발생하게 되고,
이 meta 파일 뿐만 아니라 Package라든지 Asset이라든지 이런 파일들이 이 Unity 버전과 종속성이 있다.
그러다 보니 마음대로 버전업을 하다보면 패키지가 더이상 지원을 안 한다든지 Asset이 특정한 버전에 지원을 안 한다든지 이런 문제가 발생할 수 있다.
이런 문제가 발생하게 되면 정말 대처가 어렵다...

그래서 특별한 이유가 있는게 아닌 이상, 2023에 추가된 어떤 기능이 딱 필요하다는게 아닌 이상! 개발 중에 버전을 올리는 일은 거의 없다.
처음 개발한다, 개발 준비 단계다 그럼 고민해 볼 수 있다.
기본적으로 LTS 버전 활용해서 개발해 주는 것이 좋고, 팀워크를 할 땐 버전 꼭 맞추기!!


2. Unity 살펴보기

게임 개발을 위한 통합 개발 환경

주요 기능

  • 프로젝트 관리: 새로운 프로젝트 생성, 프로젝트 파일 구성 및 관리
  • 씬(Scene) 관리: 게임의 각 장면과 화면을 구성하는 요소
    - 게임의 각 장면 또는 화면, 각 씬은 게임의 특정 부분을 담당한다.
    - 씬 단위로 오브젝트들을 로드하고 업로드한다.
  • 에셋(Asset) 관리: 게임에 필요한 리소스(이미지, 사운드, 모델 등)를 관리
  • 컴파일 및 빌드: 스크립트 코드를 컴파일하여 실행 가능한 게임으로 빌드
  • 디버깅: 코드 실행 중에 오류를 찾고 수정
  • 에디터 확장 기능: 유니티 에디터를 사용자의 요구에 맞게 확장할 수 있는 기능 제공

1) 게임 오브젝트(GameObject)

컴포넌트(Component)들의 모음!

제일 중요한 컴포넌트, Transform
위치, 크기, 회전 값을 가지고 있다.
게임 오브젝트는 무조건 트랜스폼을 가지고 있으며, 그 트랜스폼을 통해 부모-자식 관계를 가진다.(게임오브젝트들의 구조가 계층뷰인 이유)

보이지 않고 기능만 수행하는 게임오브젝트도 있다. (GameManager 등)

2) 컴포넌트(Component)

게임오브젝트를 구성하는 부품

Transform, SpriteRenderer 등등
각 기능들의 부품(Component들을 붙여서 게임오브젝트를 완성하는 것이다.)
monobehavier를 상속받게 되면 Component라고 얘기할 수 있다.

Sprite Renderer
이미지. 2D 이미지를 표현하는 컴포넌트

Rigidbody
중력. 강체 물리를 적용하기 위한 컴포넌트

3) 에셋(Asset)

이미지, 사운드, 모델 등
코드를 포함하여 게임에 필요한 모든 리소스


3. 프로젝트 생성하기

템플릿: 프로젝트의 기본 세팅
프로젝트 이름은 영어로! (한글 경로는 프로그래밍에서 만악의 근원)

Unity 인터페이스

  • Hierarchy 뷰: 현재 씬의 게임 오브젝트 계층 구조 표시 및 편집
  • Scene 뷰: 게임 개발자의 관점에서, 현재 씬의 오브젝트들의 배치 등을 관리
  • Game 뷰: 게임 플레이어들의 관점의 뷰로, 카메라가 찍은 플레이 화면을 확인
  • Inspector 뷰: 선택된 게임 오브젝트의 속성 및 구성 요소 편집 (설정창)
  • Project 뷰: 프로젝트의 에셋 표시 및 관리
  • Console 뷰: 게임 실행 중의 로그 및 메시지 표시 (디버그 용도 등)

4. 게임 개발 맛보기 "PONG"

최초의 아케이드 비디오게임 PONG
전통적인 탁구 게임을 모티브로 한 간단한 2D 게임이다.
이 게임을 개발하면서 유니티의 기초적인 개념과 기능을 학습할 수 있다.

1) SpriteRenderer

2D 이미지를 표현하는 컴포넌트
Sprite: 어떤 이미지를 표현할 것인지
Color: 이미지의 색상
FlipY: 이미지의 상하 반전
FlipX: 이미지의 좌우 반전
Sorting, Order in Layer: 그리는 우선순위
(Order in Layer: 가장 작은 값이 가장 뒤에 깔림)

2) Rigidbody2D

물리랑 관련
물리를 적용할 것인지 아닌지 등을 세팅

3) Collider2D

충돌의 범위를 결정한다는 개념
Collider 컴포넌트가 달려있게 되면, 충돌이 일어났을 때 OnCollisionEnter, OnCollisionExit, OnCollisionStay 등의 함수들이 발생 → 이걸 통하여 코드를 쉽게 구현할 수 있다

Project에 있는 square 이미지를 Hierarchy창 빈 공간에 드래그 앤 드랍을 하게 되면 SpriteRenderer를 기본적으로 포함하고 있는 게임오브젝트를 만들 수 있다.

기본적으로 생성 후 Transform 값을 Reset 해주는 작업 먼저 하자.

강의 보면서 게임 오브젝트 생성 및 배치하기

Transform-Position 카메라가 뒤에서 찍을 수 있도록 음수값으로 설정하기?

카메라의 Size는 y축을 기준으로의 사이즈를 말하며, 사이즈가 8인 경우 y축으로 8*2=16의 사이즈를 가진다.
(Orthographic - 원근감이 없는 카메라인 경우에만 나타남, 2D처럼 입체감이 없다)

Camera
Background 검정색
Size 8

기본 세팅 완료~

Physics Material
충돌이 일어날 때 어떤 식으로 충돌이 일어날 것인지 세팅

Rigidbody2D
Gravity Scale: 중력이 얼만큼인지 정해주는 것
Constraints: 제약, 부딪혀도 움직이지 않도록. 변형되지 않도록? 설정
(Freeze Position X, Freaaze Rotation Z 체크)

Box Collider2D
isTrigger: 충돌했다는 걸 인지, 물리적 충돌을 일으키는 게 아니라 인지만 함

✔️ 한 쪽이 Trigger가 되어 있는 상태에서의 충돌, 물리적 충돌이 일어나지 않는 충돌에 대해서는 onTriggerEnter2D를 활용하게 된다.

빌드하기
File - Build Settings
Scenes In Build에 SampleScene이 없다면 Add Open Scenes 클릭

👀 최종 결과

플레이 후 1.5배속 재생한 움짤이다.
나가기 기능이 없어서 종료할 땐 Alt+F4를 눌러야 한다.

스크립트는 임포트로 받아와서 직접 작성하진 않았다.
Unity 자체를 맛보기로 만져볼 수 있었다.


5. TopDownShooting 프로젝트 세팅

기본적인 게임에 대한 설계를 하는 부분
좀 더 복잡한, 객체 지향적인 로직을 설계하는 부분

1) 클래스 구조(메인)

TopDownController

정말 많은 일이 일어나는 곳이다. 그래서 이것을 잘 만드는 게 중요하다.

이게 무슨 기능임?
게임 모델들(플레이어, 몬스터 등)의 기본적인 움직임을 전체적으로 틀을 잡아놓는 클래스
이동에 대한 기본적인 동작뿐 아니라 행동의 전반적인 구성에 대한 정의가 들어감

PlayerInputController
TopDownController를 상속받아서 Input을 받아서 처리하는 부분

TopDownMovement
실제 어떻게 이동을 할 것인지 적용해 주는 부분

TopDownAimRotation
조준하는 부분, 팔을 돌리는 등

TopDownShooting
화살을 쏘는 부분(화살 생성)

ProjectileController
화살이 날아가는 부분 구현

AnimationController
애니메이션 적용, 이전까지는 적용 X

TopDownAnimationController
애니메이션을 확장 가능한 구조로 설계하기 위해서 구성

TopDownEnemyController

  • TopDownRangeEnemyController (원거리 적)
  • TopDownContactEnemyController (근거리 적)

DestroyOnDeath
피격과 죽음에 대한 구성

2) 클래스 구조(기타)

서브 시스템

CharacterStat
스탯 시스템

CharacterStatHandler
Stat을 계산하는 부분

HealthSystem
피격 관련

ObjectPool
GameManager
싱글톤 패턴, 옵저버 패턴

기본 세팅(패키지 추가) 완료!

3주차 팀 프로젝트 개인 레포지토리로 옮기기 완료!

다음 강의도 열심히 듣기 준비 완료!

0개의 댓글