광산김가네

[모각코] [Unity/유니티] 회고록 본문

카테고리 없음

[모각코] [Unity/유니티] 회고록

어둠의 그림자 2021. 8. 28. 16:03

초반 목표 :

초반(~8월 초반)에 스터디 형식으로, c#을 활용한 유니티 프로그램을 활용하여 기초적인 게임(ex 쿠키런, 항아리게임과 같은 대중적인 게임)을 따라 만들어보면서, 유니티 프로그래밍의 기초공부를 하고싶습니다. 그이후에는(~8/28) 개인별로 만들보고싶은 간단한게임을 선정하여 게임제작을 목표로 두고있습니다

 

전반회차: 플랫포머게임을 활용한 클론코딩

초반(~8월 초반)에 스터디 형식으로, c#을 활용한 유니티 프로그램을 활용하여 기초적인 게임(ex 쿠키런, 항아리게임과 같은 대중적인 게임)을 따라 만들어보면서, 유니티 프로그래밍의 기초공부를 하고싶습니다.

목표: 유니티 게임엔진및 c#의 기초 학습

진행내용

유니티 게임엔진

[컴포넌트]

sprite renderer (스프라이트(게임에서 나타나는 모든 물체(ex 플레이어, 나무, 적))의 이미지를 관리)

rigidbody 2d ( 물리적인 부분을 설정 ex, 중력, 속도등등)

collider ( 경계 설정)

animator(애니메이션 관리)

c# 스크립트 적용(public으로 선언한 변수들을 직접 삽입해줘야함)

[게임 오브젝트]

해당 툴들을  사용하여 "Scene"에서 스프라이트 크기,방향, 위치를 수정할수있음
hierarchy 라는 창에서 다양한 종류의 오브젝트들을 생성할수있음

c# 스크립트 

기본적으로 클래스 형태로 형성되어있음, 기본문법은 c와 거의 흡사함

변수값 생성및 적용

앞서 언급된 컴포넌트들을 스크립트에서 불러와 사용함

bool값이나 변수의 값들을 조건문을 이용하여 변경함

//GetComponent로 컴포넌트 기능을 불러옴
rigid = GetComponent<Rigidbody2D>();
//public으로 선언한 변수들은 유니티 엔진에서 설정가능및 삽입
public float Speed;
public GameManager manager;
//Input.GetButtonDown(keyDown)으로 사용자가 키를 누른여부 받아올수있음
h = manager.isAction? 0 : Input.GetAxisRaw("Horizontal");

게임 구현기능:

- player 오브젝트 이동,점프(키조작으로)

- 애니메이션 (고정된 오브젝트가 아닌 자연스럽게 움직이는것처럼 보이게 하기위해)

- 피격 기능

- 적 ai 설정

- hp bar 설정

- ui 구성

 

회고: 책이나 강좌를 따라하는것보다 구글링을 통하여 클론코딩을 하였기때문에 시행착오가 굉장히 많았지만 그만큼 다양한 에러를 접해보면서 유니티 엔진에 대한 이해도가 더 깊어질수있었다. 

후반회차: 원하는 게임 만들어보기

그이후에는(~8/28) 개인별로 만들보고싶은 간단한게임을 선정하여 게임제작을 목표로 두고있습니다

목표: 앞서 학습한 내용을 가지고 원하는 게임을 기획부터 개발까지 진행한다

진행내용

 

게임 기획(게임장르 정하기,해당장르의 게임 분석,게임지향성 등 정하기)

기본 플레이어 이동, 맵 설정

대화 시스템 구현

퀘스트 기능 구현

인벤토리창 기능 구현

 

게임내용: 무인도에 떨어진 주인공(플레이어)이 퀘스트들을 해결해나가면서 무인도를 탈출하는 게임

 

추가적으로 학습한 내용

c#

-rayhit2d_사물을 조사할때 주로 사용

-delegate_여러클래스에서 서로 호출을 할때 충돌 방지로 사용

-오버로딩_매개변수 유무에 따른 함수 호출차이

-dictionary 타입 변수_ 대화 데이터만들때 사용

-SetActive 함수로 오브젝트의 활성화 여부 변경

-instance, this:이미 만들어진 게임 오브젝트를 필요할 때마다 실시간으로 만든다는 의미

 

유니티

-button onClick 메소드

-slot holder_ grid layout group 컴포넌트

-image inspector(sprite editor)_border부분을 수정해주면 픽셀이 깨지지않음

-

캔버스에서의 정렬기능


 

회고: 앞서 만들었던 플랫포머게임보다 더 많은 기능을 구현함으로써 원래 알고있었지만 잘 다루지못하던 기능(ex ui 생성으로 canvas에서 button/panel등 생성하는 기능/ main camera)들을 다시금 익힐수있었음. 또한  디자인적부분보다 기능적인 부분에 좀더 치중을 가해서 개발하여서 기능추가에 좀더 박차를 가할수있었다.

처음 기획할때에 난이도나 투자시간을 가늠하지못해서 목표를 다소 높게 잡은바가 있었는데 나중에는 실현가능한 계획들을 세움으로써 플랫포머 보다 좀더 완성도 있는 게임을 제작할수있었다