한마음

나의 두번째 개발 - 3D 한글교육용 게임 본문

개발일지

나의 두번째 개발 - 3D 한글교육용 게임

갓태희 2020. 11. 8. 20:48

본 글에앞서 나의 이야기


내 두번째 개발은 또 게임이다. 이전글을 보고왔으면 알겠지만 난 프리메이플 개발을 했었던 경험이 있다.

 

그땐 자바스크립트와 Netbeans 라는 프로그램을 이용해 자바를 손댔었다.

 

그런 경험을 가진채로 컴퓨터공학과에 진학하게 되었지만 어린아이에 머물러있던 나의 정신연령덕에(지금은 1살정도 더 먹어서 15살정도된

 

거같다.) 군입대전 1년 군입대후 2년 이렇게 총 3년이라는 시간을 C언어와 C++도 모른채로 살아왔다.(군대가면 정신차린다는말이 모두에게

 

적용되는건아니다 반례: 나)

 

그러다가 3학년이 되는해에 여느때와 같이 나를 많이 챙겨주시는(이 형덕에 롯데시네마에서 알바도 해봤다) 형과 얘기를 하다가

 

"너는 4학년이 되가는데 아직도 C언어도 모르냐" 이 말 때문에 나의 코딩 실력은 급진적으로 발전할수 있게되었다

 

사실 그말에대한 빡침때문에 시작하게됬고(롯데시네마도 니 얼굴이 들어갈수있겠냐 라는 동기친구의 말에 빡쳐서 롯데시네마 홀에 앉아 자

 

소서를 4시간동안 쓰고 결국 들어가게됬다 이런 경험이 나는 다수 있다. 어떤 말에 빡쳐서야 행동에 옮기는 그리고 결과를 만들어내는..)

 

4학년이되는 방학에 나는 C언어와 C++을 동시에 공부하기 시작했다 

 

생각보다 나는 C언어를 적어도 대학교 교과과정에서 배우는과정은 어느정도 알고있었 C++재이수 과정에서 정말 열정가득하신 젊은교수님

 

을 만나뵙게되어 더 열심히 했다.

 

중 고교시절 수학선생님들이 좋아서 수학을 더 열심히하고 잘했기도했는데 그와 같은 경험을 오랜만에 하게되었다.

 

그렇게 나는 재이수의 최대 점수인 B+학점을 모두 채우고 어느새 내 주언어는 C++이 되었다.

 

그러다가 "모바일프로그래밍"이라는 과목을 듣게 되었는데 거기서 유니티를 처음알게 되었다.

 

시험 1번과 프로젝트 1번으로 평가하는 수업이였는데 교수님이 직접 쓰신 교재를 읽고 예제들을 따라하면서 유니티에 재미를 붙혔다.

 

C,C++에서 C#,HTML 등등을 배우면서 하나의 언어만 잘해놓으면 나머지 언어들은 왠만해선 "Hellow world"를 쳐보면서까지 배울필요는

 

없다는걸 깨달았다.

 

아직 내가 언어를 대학과정에서만 배우는 지식까지 알고있어서 그렇게 더 느껴지겠지만 아무튼 각 언어가 조금 조금씩만 달랐다.

 

책이 술술 읽히고 시험도 내 기억으론 1등을 한거같다 만약 아니라면 상위권인건 확실했다

 

그리고 학교 제출용 프로젝트로도 어린이들을 위한 한글교육용 게임을 만든다고 했지만 이론과 실전은 확실히 다른것같다.

 

결국 미완성인 채로 제출하게 되었고 프로젝트점수는 그렇게 좋지 않은 점수를 받게 되었지만 시험점수의 비율이 더 높아서 A+학점을 받게

 

되었다.

 

친구들끼리 서로의 학점 결과를 얘기하다가 과 동기형이 공대 문앞에 붙혀져있는 전라북도문화콘텐츠산업진흥원에서 주관하는 2018 기능성게임페스티벌(게임제작대회)의 포스터를 보고 나에게 나가보라고 제안을 했었다. 나는 칭찬에 익숙하지않아서 제안이 들어오면 겸손하게 말을 하는편인데 역시 그때도 에이 학교에선 A+를 받았는데 내가 직접 개발할 수준까진 아닌거같애 라는 말로 거절을 했었다. 하지만 유니티라는것이 아무것도 모른채로 수업을 들었는데 이렇게 흡입력있게 시험을 치르고 프로젝트를 진행한적은 학기중에 있어서 처음이라 유니티로 게임을제작하는것에 도전하고 싶어졌다. 그래서 나에게 제안한 형과 다른친구 1명과 함께 총 3명이서 한팀을 이뤄 게임 제작대회에 나가게됬다. 

 


대회 시작


나는 무언가를 시작하기에 앞서 항상 두려움을 느끼거나 부정적으로 생각하는 경향이 있는것 같다.

 

그런데 이러한 생각과는 달리 내가 끊임없이 또 쓸데없이 부풀려나갔던 나의 부정적인 생각은 전혀 일어나지 않고 좋은결과를 이끌어 낼때가 분명히 있었다. 이러한 경험들이 조금씩 쌓이다보니 저런생각에 시간을 허비하고 에너지를 낭비하는것이 얼마나 바보같은 짓인지를 깨닫게 되었고 이제 나의 실패를 다른사람들의 탓으로 돌리는 짓또한 다시는 하지않는다. 이러한 생각을 갖게해준 전주와 서울에서 만난 많은 지인들과 유튜브라는 플랫폼에 감사할 따름이다.

 

대회를 시작할때 나는 학기중에 마치지 못한 프로젝트가 너무 아쉬웠다 왜냐하면 그것은 나의 늦둥이 동생을 위한 프로젝트였기 때문이다.

 

무슨말이냐면 내 막내동생 2020년기준으로 10살 인데 그때당시 9살이였던 내 동생뿐만아니라 요즘 자라나는 아이들은 스마트폰을 보면서 자란다. 나는 우리집 앞에있는 흙하고 개미, 귀뚜라미 이런거 가지고 놀았었는데 시대가 확실히 좋아졌다 롯데시네마 알바를할때는 심지어  유모차에 스마트폰 거치대까지 설치가되어있는 모델까지 보게되었다.

이 스마트폰으로 대부분 유튜브를 시청하거나 게임을 하는데 스마트폰에 할애하는 시간이 어차피 많을거라면 차라리 게임을 하더라도 한글모형들이 나오는 게임을 하면 조금이라도 스마트폰을 하는 시간을 알차게 쓸수있지않을까 라는 생각에 만들게 된것이다.

 

 

 

 

ㄱㄴㄷ


방금 본 소제목은 오타가아니다 실제 나의 게임 이름이다. 한글게임과 아이들이 쉽게 기억할정도의 게임이름이 무엇이 있을까라는 생각을 계속하다가 가장 간단한 ㄱㄴㄷ를 생각하게 되었고 매우간단했지만 작명이 생각보다 쉽지않았다.

이제부터 저희 팀이 어떻게 게임을 구성하고 어떠한 방식으로 플레이했는지 그리고 내부 코드를 설명하겠습니다.

 

Scene 구성도

 

총 5가지의 Scene으로 구성되어 있습니다.

 


1. StartScene

StartScene

첫번째 StartScene 입니다

 

- 배경화면이미지 객체 1개와 로고 이미지 객체 1개, 버튼기능이있는 객체 3개로 구성되어있습니다.

- 최상단에 있는 ㄱㄴㄷ가 저희 팀의 게임 이름입니다.

- 로고의 바로 밑에 있는 버튼은 게임시작 버튼으로 로고 다음으로 가장 눈에 잘들어오는 위치라고 판단해서 배치했습니다.

- 게임시작 버튼을 기준으로 왼쪽버튼을 클릭하면 자음카드를 모아놓은 JaeumScene으로 이동합니다.

- 게임시작 버튼을 기준으로 오른쪽버튼을 클릭하면 모음카드를 모아놓은 MoeunScene으로 이동합니다.

- Main Camera에 음악을 배경음악을 재생하도록 추가시켰으며 각 버튼을 누를때 효과음이 재생됩니다.

- 게임시작버튼을 눌렀을때를 제외하고 나가기 버튼을 통해 원래 StartScene으로 돌아갈수 있습니다.

- 자음카드가 나오는 JaeumScene 같은 경우는 한 화면에 다 담을수가 없어서 드래그를 통해 전체 자음을 볼수있습니다

 

// LoadingScene.cs -> StartManager객체
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;

public class LoadingScene : MonoBehaviour
{
    public AudioClip Btsound;
    AudioSource Audio;

    void Start()
    {
        Audio = GetComponent<AudioSource>(); // 버튼클릭시 사운드 재생을 위한 AudioSource 객체
    }

    public void LoadStart(){ // 게임 시작 Scene
        SceneManager.LoadScene(1);
    }
    public void LoadJaeum(){ // 자음 Scene
        SceneManager.LoadScene(3);
    }
     public void LoadMoeum(){  // 모음 Scene
        SceneManager.LoadScene(4);
    }
     public void BtnSound(){ // 버튼을 클릭했을때 소리
        Audio.clip = Btsound;
        Audio.Play();
    }
}

 

씬을 변환하고 오디오를 재생하는 아주 기초적인 스크립트입니다. 이것을 StartManager라는 Empty객체에 Component로 추가시켰습니

 

다. 설명은 주석에 적어놨습니다. 1년만에 다시보는거라 다시 익숙해지면 Unity 강의글도 올려보고싶네요

 


 

2. MainMenu & Sky Island

MainMenu & Sky Island

두번째 MainMenu 와 Sky Island 입니다

 

원래는 다섯개의 씬을 각각 설명하려했는데 MainMenu와 Sky Island는 서로 연관되어있는게 많아 같이 설명하려합니다.

- 처음 MainMenu 씬에 들어가면 많은 자음중에 ㄱ자음의 버튼만 활성화 되어있습니다.

 

- 각 자음 버튼을 누르면 선택한 자음으로 시작하는 제시어들이 주어집니다

ex) ㄱ버튼을 누르면 ㄱ으로 시작하는 단어 아무거나 , ㄴ버튼을 누르면 ㄴ으로 시작하는 단어 아무거나

단 아이들을 위한 게임이므로 그에맞는 조금 쉬운 단어위주로 저희팀이 골랐습니다.

 

- 게임 시작전 로딩화면을 추가함으로써 맵이 만들어지는데 시간을 벌었습니다. 이 시간동안 자음과 모음 Item들이 맵 내부의 랜덤한 위치에 떨어 지게 됩니다

->이 과정속에서 가끔 지붕위로 떨어지는 자음과 모음이 있었습니다. 캐릭터는 점프할수 없기때문에 그런 자음과 모음들은 캐릭터가 닿을수있는 위치에 재배치됩니다.

 

- 자음과 모음이 캐릭터와 닿은후 Z키를 누르면 제시어에 주어진 자음과 모음이면 그에 해당하는 자음혹은 모음카드와 O표시, 사운드까지 출력되며 왼쪽상단에 하트가 떨어지지 않습니다. 만약 틀린 글자를 선택한다면 X표시와 틀린자음혹은 모음카드를 출력하도록 했고 동시에 하트가 한개 감소하는 모습을 볼수있습니다. 어린아이들에게 벌써부터 틀렸다는 사운드나 캐릭터의 하트가 다 떨어져 죽는다거나 하는것을 경험시키기는 싫어서 맞출때까지 하트는 1개에서 떨어지지않습니다. 이게 맞는건가 싶기도하면서도 그냥 그런 마음때문에 그렇게 구현하게 됬습니다.

 

- 랜덤으로 떨어진 자음과 모음에 캐릭터가 닿는다면 반짝반짝 빛나는 이펙트를 추가하였습니다. 저희가 이걸 만들기전 게임을 해보니 뭔가 밋밋하고 캐릭터가 한글에 닿아있는지 확실치가 않아서 추가하게됬습니다.

 

- 게임을 시작하면 오른쪽 상단에 주어진 제시어에 있는 자음과 모음을 모두 맞추면 1 라운드가 끝나게 되며 별 한개를 얻을수있습니다.

 

- 제시어 오른쪽에 알맞는 간단한 그림을 보여줌으로써 혹시 아이들이 제시어를 어려워 한다면 그림을 통해 조금더 쉽게 해결하도록 했습니다.

 

- 각 자음당 3개의 별, 즉 3라운드를 모두 통과하고나면 다음 자음버튼이 활성화되고 이렇게 무한반복을 통해 ㅎ까지 도달하면 게임은 끝이 납니다.

 

 

오늘 포스팅은 여기까지 하고 제가 알고리즘을 하러가야하기때문에 추후에 이 글을 수정하거나 다음글을 연속적으로 올리겠습니다.

 

 

 

'개발일지' 카테고리의 다른 글

프로그래밍을 입문하게된 첫 계기  (2) 2020.11.08
Comments