본문 바로가기
제출용/TIL

내일배움캠프 17일차 TIL + Pong Game

by 유린테 2024. 5. 8.

새로운 프로젝트! 새로운 팀! 으아악!

오늘은 새 강의가 들어와서 유니티 입문을 시작했다!

 

Unity 소개

게임 엔진이란? 

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

그래픽, 물리,  사운드, 애니메이션, 인공지능 등 다야한 요소 관리 및 통합

 

unity 특징

다양한 플랫폼에서 실행 가능한 게임 개발 (aka 크로스플랫폼)

사용자 친화적인 인터페이스와 강력한 기능 제공

 

Unity의 구조

C++로 구성된 코어 엔진을 연결해주는 C# 구현부,

여기에 C# 언어를 통해 스크립트를 작성하는 방식

 

최신버전의 유니티가 무조건 좋은건 아님

나올 때 마다 업데이트 마구 해버리면 버전 별 파일들이 꼬여서 오류가 많이 발생한다

패키지나 에셋이 버전과 종속성이 있어서 막 바꾸면 호환이 안될수도 있다

개발 전에는 버전을 올릴 수 있지만 , 개발 중에 버전을 바꾸는 경우는 없다

 

유니티 주요 기능

프로젝트 관리 : 새로운 프로젝트 생성, 프로젝트 파일 구성 및 관리

씬 관리 : 게임의 각 장면과 화면을 구성하는 요소

에셋 관리 : 게임에 필요한 리소스를 관리

컴파일 및 빌드 : 스크립트 코드를 컴파일하여 실행 가능한 게임으로 빌드

디버깅 : 코드 실행 중 오류를 찾고 수정

에디터 확장 기능 : 유니티 에디터를 사용자의 요구에 맞게 확장할 수 있는 기능 제공

 

에셋, 씬, 게임 오브젝트의 개념과 관계

 

씬 

연극에서 하나의 막과 유사

게임의 각 장면 또는 화면을 의미, 유니티에서는 씬 단위로 오브젝트를 로드하고 업로드함

유니티에서 게임은 하나 이상의 씬으로 구성되며, 각 씬은 게임의 특정 부분을 담당

예를들어 메뉴씬, 게임플레이씬, 엔딩씬 등

 

게임 오브젝트

씬에 배치되는 모든 요소, 게임의 동작과 상호작용 담당

예를들어 캐릭터, NPC, 아이템, 장애물 등

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

게임오브젝트는 무조건 트랜스폼을 가지고 있으며, 그 트랜스폼을 통해 부모-자식 관계를 가짐

(그래서 게임오브젝트 구조가 계층뷰인것)

 

컴포넌트

게임오브젝트를 구성하는 부품. Transform, SpriteRenderer 등

각 기능들의 부품을 붙여 게임오브젝트를 완성하는 것

 

에셋

일반적으로 말하는 에셋은 이미지, 사운드, 모델 등을 말함

정확하게는 코드를 포함하여 게임에 필요한 모든 리소스

프로젝트의 에셋 폴더에 저장되며, 유니티에서 사용 가능한 형식으로 가져와서 게임에 활용할 수 있습니다.

 

unity 인터페이스

Hierarchy 뷰 : 현재 씬의 게임 오브젝트 계층 구조 표시 및 편집

Scene 뷰 : 게임 개발자의 관점에서, 현재 씬의 오브젝트들의 배치 등을 관리

Game 뷰 : 게임 플레이어들의 관점의 뷰, 카메라가 찍은 플레이 화면을 확인

Inspector 뷰 : 선택된 게임 오브젝트의 속성 및 구성 요소 편집

project 뷰 : 프로젝트의 에셋 표시 및 관리

Console 뷰 : 게임 실행 중의 로그 및 메세지 표시

 

기본 레이아웃 세팅

상단메뉴 - window - layer - 2by3

그리고 이렇게 옮겨주면 시원시원한 세팅이 된다고 하셨삼.

저번 유니티 강의랑은 세팅이 또 달라서 신기하다!

 

유티니 조작

마우스 왼쪽 : 게임 오브젝트 선택

마우스 오른쪽 : w s a d q e 로 씬 뷰를 1인칭 이동가능, 드래그 시 뷰 회전

마우스 스크롤 : 줌 인 & 줌 아웃

마우스 스크롤 클릭 : 씬 뷰 이동

alt + 마우스 왼쪽 드래그 : 씬 뷰 화면 중심 회전

alt + 마우스 오른쪽 드래그 : 줌 인 & 줌 아웃

 

회전 시 나오는거 X,Y,Z - RGB 

와 이거 이때까지 3D 프로그램 사용하면서 몰랐던건데... 

몰라서 하나하나 잡아서 돌려보고 찾았는데 대박

 

그리고 내가 한참 고생했던 오류ㅜ인 .... C# 자동완성이 안돼는 오류

>> 에딧 프리퍼런스에서 비쥬얼스튜디오 연결해주기

이거 설명해주셨음 ㅠㅠ흑흑 이걸로 몇시간을 고생했는데..... 

 

PONG 게임

최초의 아케이드 비디오게임  

Pong 은 탁구게이을 모티브로 한 간단한 2D게임

 

SpriteRenderer 

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

어떤 이미지를 표현할 것인지 (Sprite) 이미지의 색상 (Color) 이미지의 상하(Flip Y), 좌우 (Flip X), 반전,

우선순위(Sorting, Order in Layer) 등을 설정할 수 있습니다.

여기서 Color를 설정하는게, 모든 픽셀을 하얀색으로 하는 그런게 아니라

이미지를 하얀색이라 생각할 때, 거기에 색을 곱해주는 느낌 (셀로판지를 덧대는 느낌) 이라고 생각하면 된다.

 

Rigidbody2D

2D게임에서 유니티 내부 물리엔진을 기반으로 움직임을 시뮬레이션 하는 용도로 쓰임

보이지 않고 기능만 수행하는 게임오브젝트.

 

Collider2D

충돌이 일어나거나 특정 범위에 있는지 판단 하는데 사용하는 컴포넌트

물리 시뮬레이션과 같이 화살이 맞았는지, 캐릭터가 포탈 위에 있는지 같은 판단을 한다

Collieder2D 계열 컴포넌트가 붙어있으면 충돌이 일어났을 때 OnCollisonXXX2D 계열의 이벤트가 발생함.

주로  박스, 서클 , 캡슐 콜라이더 사용/ 메쉬나 컴포시트 같은 복잡한 형태도 있음

 

새로운 컴포넌트 집어넣었을 때 기본적으로 트랜스폼 리셋을 한번씩 해주는게 좋다

 

카메라를 넣어줬을 때 위치가 Z -10 으로 되어있는게 많은데, 0으로 바꿔주면 화면이 보였다 안보였다 할 수 있음

살짝 뒤로 해줘서 다 보이게 해주는 것임

 

튕기는거 

Bounce Physics Material 2D 

 

box collider 2D 에서  is trigger 체크해주면 충돌 인식은 하지만 튕겨나오거나 그런건 없음

 

리기드바디를 해줄 때, 중력 때문에 떨어지기 때문에 Gravity Scale 을 0으로 바꿔준다 (원래 1로 되있음)

그리고 골대가 공 맞고 밀려나면 안돼니까 Constraints에서 Freeze 를 걸어 밀려나지 않게 해준다.

 

float x = Random.Range(0, 2) == 0 ? -1 : 1; 

Random.Range(시작숫자, 끝숫자(포함안됨) )  위의 경우 0,1 중에 랜덤인거임 (끝숫자는 포함이 안돼. 그것보다 작은숫자)

0이면 -1, 1이면 1 이라는 뜻

 

코드 쓸 때 처음부터 작성해서 자동완성 사용하는게 좋다.

중간에 고쳐쓰면 파라미터가 조금씩 다르기 때문에 작동하지 않을 수 있음

 


 

ㅎ헤 권장에는 오늘 강의 다 들으라고 되있던데 반도 못들었다

내 집중력과 ... 이해력이 따라가지 않음 도저히

캭..!!! 내일은 꼭 완강!!1!!!!!!!