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 버전 활용해서 개발해 주는 것이 좋고, 팀워크를 할 땐 버전 꼭 맞추기!!
게임 개발을 위한 통합 개발 환경
주요 기능
컴포넌트(Component)들의 모음!
제일 중요한 컴포넌트, Transform
위치, 크기, 회전 값을 가지고 있다.
게임 오브젝트는 무조건 트랜스폼을 가지고 있으며, 그 트랜스폼을 통해 부모-자식 관계를 가진다.(게임오브젝트들의 구조가 계층뷰인 이유)
보이지 않고 기능만 수행하는 게임오브젝트도 있다. (GameManager 등)
게임오브젝트를 구성하는 부품
Transform, SpriteRenderer 등등
각 기능들의 부품(Component들을 붙여서 게임오브젝트를 완성하는 것이다.)
monobehavier를 상속받게 되면 Component라고 얘기할 수 있다.
Sprite Renderer
이미지. 2D 이미지를 표현하는 컴포넌트
Rigidbody
중력. 강체 물리를 적용하기 위한 컴포넌트
이미지, 사운드, 모델 등
코드를 포함하여 게임에 필요한 모든 리소스
템플릿: 프로젝트의 기본 세팅
프로젝트 이름은 영어로! (한글 경로는 프로그래밍에서 만악의 근원)
최초의 아케이드 비디오게임 PONG
전통적인 탁구 게임을 모티브로 한 간단한 2D 게임이다.
이 게임을 개발하면서 유니티의 기초적인 개념과 기능을 학습할 수 있다.
2D 이미지를 표현하는 컴포넌트
Sprite: 어떤 이미지를 표현할 것인지
Color: 이미지의 색상
FlipY: 이미지의 상하 반전
FlipX: 이미지의 좌우 반전
Sorting, Order in Layer: 그리는 우선순위
(Order in Layer: 가장 작은 값이 가장 뒤에 깔림)
물리랑 관련
물리를 적용할 것인지 아닌지 등을 세팅
충돌의 범위를 결정한다는 개념
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 자체를 맛보기로 만져볼 수 있었다.
기본적인 게임에 대한 설계를 하는 부분
좀 더 복잡한, 객체 지향적인 로직을 설계하는 부분
정말 많은 일이 일어나는 곳이다. 그래서 이것을 잘 만드는 게 중요하다.
이게 무슨 기능임?
게임 모델들(플레이어, 몬스터 등)의 기본적인 움직임을 전체적으로 틀을 잡아놓는 클래스
이동에 대한 기본적인 동작뿐 아니라 행동의 전반적인 구성에 대한 정의가 들어감
PlayerInputController
TopDownController를 상속받아서 Input을 받아서 처리하는 부분
TopDownMovement
실제 어떻게 이동을 할 것인지 적용해 주는 부분
TopDownAimRotation
조준하는 부분, 팔을 돌리는 등
TopDownShooting
화살을 쏘는 부분(화살 생성)
ProjectileController
화살이 날아가는 부분 구현
AnimationController
애니메이션 적용, 이전까지는 적용 X
TopDownAnimationController
애니메이션을 확장 가능한 구조로 설계하기 위해서 구성
TopDownEnemyController
DestroyOnDeath
피격과 죽음에 대한 구성
서브 시스템
CharacterStat
스탯 시스템
CharacterStatHandler
Stat을 계산하는 부분
HealthSystem
피격 관련
ObjectPool
GameManager
싱글톤 패턴, 옵저버 패턴

기본 세팅(패키지 추가) 완료!
3주차 팀 프로젝트 개인 레포지토리로 옮기기 완료!
다음 강의도 열심히 듣기 준비 완료!