안녕하세요! 인디 게임을 개밣는 심리학도 라메드 입니다.
( 네 개밣는 입니다.. 오늘은 '개발하는'보다는 개밣는이 어울려 보여서 오타를 냅뒀습니다. )
어제 여자친구와 즐거운 시간을 보내고 .. 집에서 멍때리고 있던 중 ,
과연 내가 게임 개발자라고 할 수 있는가.. 에 대한 고찰이 시작되었습니다.
(사실은 그냥 심심했습니다..)
고뇌의 끝은 실천이라고 했던가요.
원래 굴러먹던(?) 성격대로 부딪혀 보기로 합니다.
그래서, 명작 게임을 하나씩 모작해 보면서
코딩 실력을 길러보기로 했습니다!
( 사실 노는 겁니다. )
그래서 !!
오늘 만들 게임 : 테트리스 (Tetris)
(출처 유튜브)
네, 테트리스 입니다. 사실 설명이 필요한가 싶을 정도로 테트리스는 고전 명작이라고 할 수 있습니다.
저 어릴 때는 서비스하는 한국 테트리스도 많았는데, 제가 알기로는
저작권 크리티컬을 맞고 물리침을 당했습니다.
비슷한 게임으로는 뿌요뿌요가 있어요.
준비물
Unity3D
VisualStudio Code
유니티는 게임 개발 엔진이고, VS code는 코딩을 도와줍니다. (IDE)
그럼 본격적인 개발에 들어가 보겠습니다.
1. 간단하게 만들자.
단순화
우선 테트리스의 블록 하나 하나는 사실 그냥 상자입니다.
즉, 있고 / 없고 라는 두가지 데이터만 가져도 되는 객체 입니다.
거기에 몇 가지 추가를 한다면, 지금 이 블록이 살아있는지 (조작이 가능한지 )
또 이 블록의 위치는 어디인지 정도가 되겠습니다.
위 4 문장을 코딩으로 하면 다음과 같습니다.
이렇게 Mark 라는 이름의 블록 또는 빈칸(블록이 없는 빈 공간)이 되어줄 객체가 생겼습니다!
2. 보여주자.
위의 데이터를 이제 보여주는 스크립트를 짜줍니다.
이름은 ShowManager로 했습니다.
코드 :
복잡해 보이지만,
크게 함수2개로 이루어진 간단한 코드입니다.
1번 함수 InitBLockByData() 은 처음에 블록을 생성해줍니다.
(Init = initiate의 약자입니다. )
2번 함수 ShowBlockByData()은 생성된 블록의 켜지고 꺼짐 ( 블록이 있고 없음) 을
반영해줍니다. 매 프레임마다 20~40회 까지 반영합니다 (Update문)<- 사실 이럴 필요 없죠 (..)
3. 근데 전 블록을 떨어트리고 싶어요
네 기반작업이 거의다 되었습니다. 이제 블록을 떨어트리는 것을 구현할 차례 입니다 !
우선 새 스크립트 블록 매니져를 짜 줍니다.
위의 3줄은 블록 빈공간을 위한 것이고,
아래 한 줄은 새로 떨어트릴 블록을 위한 것입니다.
내부에 있는 함수 중엔 ,
좌표를 입력하면 그 블록을 활성화 시켜주는 녀석과,
우선 테스트 용으로 네모 모양의 블록을 만들어주는 녀석이 있습니다.
이런 저런 함수들의 도움으로 !
우선 떨어지는 것은 구현이 되었습니다!
결과물
뭔가 부끄럽기 짝이 없군요..
평소에 물리엔진이나 간단한 액션 게임만 만들다가
알고리즘이 들어가는 게임을 만나니 호되게 당한 느낌입니다.
다음에는 테트리스의 충돌판정(아래 블럭이 있을 경우 더이상 내려가지 않음) 을 구현하고,
좌우 이동과
대망의 블록 돌리기! 를 구현하고 나면
대강 마무리가 될 것 같습니다.
읽어주셔서 감사합니다.