"리듬 게임 분석하기" 글에 이어서 여러 가지 기술적 요소를 살펴보고 있다. 리듬 게임은 첫 화면에서 원하는 음악을 선택하고 [Go] 버튼을 누르는 것으로 시작한다. 데모에서는 3가지 트랙을 담고 있는데 개별 트랙을 선택하는 방법은 상단의 사각형을 좌우로 드래그하는 것이다. 각 음악 트랙을 서로 다른 색상의 사각형으로 표시하고 있는데 이때 사용하는 주요 클래스는 Area2D, Sprite, CollisionShape2D 등이다. ■ Area2D 클래스 게임 개발에 있어 2D든 3D든 자주 사용하게 되는 것이 두 오브젝트가 겹치거나 닿을 것 같은 상황을 감지하는 충돌 감지와 충돌에 대한 반응을 처리하는 것으로 고도 엔진에서는 물리 몸체(Physics Body)로 Area2D를 비롯하여 StaticBody2..
"리듬 게임 분석하기" 글에 이어서 여러 가지 기술적 요소를 살펴보고 있다. ■ 씬 인스턴스 활용 다양한 게임 요소들은 동적인 요소와 정적인 요소로 나눌 수 있는데 음악의 비트에 따라 터치 또는 드래그하도록 숫자와 원으로 표시하는 씬이나 터치한 곳에 점수를 표시하는 씬은 게임 진행에 따라 위치와 내용, 개수가 동적인 요소이다. 반면에 배경 이미지나 게임 진행 중 화면 상단에 표시하는 점수는 게임 제작 시점에 정해진 위치와 개수대로 유지하는 정적인 요소라 할 수 있다. 동적인 요소든 정적인 요소든 동일한 씬을 위치와 모양을 바꾸어 가며 재사용하는 것이 씬의 인스턴스 활용이다. 1. 동적 예제1 extends Node2D export var sprite_fx: PackedScene func _ready() ..
고도 데모에 있는 2D 리듬 게임을 분석하며 스터디를 해볼까 한다. 위의 그림은 게임의 실행 화면으로 [Go] 버튼을 클릭하면 게임을 시작한다. Cephalopod, Disco Lounge, Werq라는 3개의 트랙이 있는데 그중에서 Cephalopod를 실행하고 있는 화면이다. 곡을 바꾸려면 [Go] 버튼을 누르기 전에 상단의 사각형 박스를 좌측 또는 우측으로 드래그하면 된다. 기본 분석 내용은 아래와 같다. ■ 프로젝트 이름 : 2D Rhythm Game ■ 프로젝트 파일 : ■ 메인 씬 : RhythmGameDemo.tscn ■ 자동 로드 : Events="*res://RhythmGame/Autoload/Events.gd" ■ 입력 맵 : ☞ touch : BUTTON_LEFT 입력 맵에서 확인할 ..
고도 편집기에서 한글을 입력하다 보면 위의 그림처럼 주요 인터페이스와 코드 편집기, 인스펙터 창에서는 번역된 부분은 한글이 제대로 출력되고 입력 내용의 한글도 문제없지만 정작 한글이 나타나야 할 작업 공간에서는 한글이 표시되지 않는 문제가 있다. 이런 현상은 실행 화면에서도 마찬가지인데, 현재 버전(V3.2.1)까지는 아직 각 노드에서 사용할 사용자 폰트로 지정해 주어야만 한글을 정상적으로 사용할 수 있다. 비주얼 스튜디오에서 C#으로 윈도우 폼 응용을 개발하는 경우 폼의 폰트를 바꾸어 주면 폼 내의 다른 컨트롤들은 통상 상속을 받아서 폰트가 폼의 폰트로 자동 적용되는데 고도에서는 루트 노드에 폰트를 설정한다고 하위 노드에 해당 폰트가 자동 적용되지는 않는다. 한글 폰트 사용 부분은 다른 통합개발도구에서..
고도 스크립트 개요, 예약어와 연산자, 고도 스크립트 타입과 변수 선언, 고도 스크립트 클래스와 함수, 고도 스크립트의 제어문, 고도 스크립트의 시그널에 이은 글이다. ■ tool 모드 통상 고도 스크립트는 실행 모드에서만 수행되고 된다. 그런데 스크립트를 편집기 내부에서도 수행할 수 있는데 스크립트 첫 라인에 위의 그림과 같이 tool 키워드를 기술하면 된다. 스크립트를 적용한 씬을 편집할 때 해당 스크립트도 수행한다. 고도에서는 현재 스크립트가 실행 모드인지 아니면 편집 상태인지를 위의 예제와 같이 Engine.editor_hint 로 확인할 수 있게 해 준다. 위의 예제에서는 _draw 이벤트 함수가 호출되더라도 실행 모드에서는 해당 이벤트를 무시하고 편집기 상태에서만 내보내기 한 변수 값으로 사각..
고도 스크립트 개요, 예약어와 연산자, 고도 스크립트 타입과 변수 선언, 고도 스크립트 클래스와 함수, 고도 스크립트의 제어문에 이은 글이다. 시그널은 오브젝트 간에 메시지를 주고받기 위한 도구로 시스템에 내장된 시그널은 필요에 따라 사용자 함수에 연결하여 해당 시그널을 받아서 사용하면 된다. 사용자 오브젝트에 시그널을 적용하고 싶다면 시그널을 정의하는 과정과 시그널을 발생시키는 과정이 필요하다. ■ 시그널 연결하기 위의 그림은 고도에 내장된 RigidBody라는 클래스의 도움말 화면으로 RigidBody 클래스에서 제공하는 시그널을 확인할 수 있다. 시스템 클래스가 제공하는 시그널의 경우에는 connect로 사용자 함수에 연결만 하면 해당 이벤트가 발생하는 시점에 지정한 함수가 호출되는 방식이다. 위의..
고도 스크립트 개요, 예약어와 연산자, 고도 스크립트 타입과 변수 선언, 고도 스크립트 클래스와 함수에 이은 글이다. ■ 조건문 if, else, elif 키워드를 이용해서 조건문을 기술할 수 있다. 블록 내 조건문 "if (velocity.y > 0):"처럼 조건에 괄호를 사용해도 되지만 C/C++처럼 반드시 기술해야 하는 필수 요소는 아니다. 조건이 true 일 때, false 일 때 수행할 문장들은 탭 문자를 이용해서 들여 쓰기 해야 한다. 조건문을 반복해야 하는 경우 elif로 문장을 이어갈 수 있다. 조건에 따라 처리해야 할 문장이 짧은 경우 위의 예제처럼 조건 표현과 같은 줄에 기술할 수도 있다. 조건에 따른 작업이 단순한 대입문인 경우 앞서 기술한 삼항 연산자를 사용하는 것도 유용하다. ■ ..
고도 스크립트 개요, 예약어와 연산자, 고도 스크립트 타입과 변수 선언에 이은 글이다. ■ 클래스 고도에서는 스크립트 파일 하나를 기본적으로 하나의 클래스로 간주한다. 단, 이름 없는 클래스인데 해당 파일에 이름을 부여하고 싶다면 class_name 키워드를 사용하여 "class_name 클래스명, 아이콘 경로"의 형식으로 기술할 수 있다. 아이콘 지정은 생략할 수 있다. 위의 그림은 스크립트에 클래스 이름을 부여하면서 아이콘을 지정한 것으로 해당 스크립트를 사용하는 노드의 아이콘이 편집기에서 지정한 것으로 변경된 것을 확인할 수 있다. 아이콘을 지정하지 않으면 상속한 부모 클래스의 아이콘을 표시한다. 고도의 클래스는 변수와 함수를 가질 수 있으며 함수는 static으로 정의해서 인스턴스화 없이도 사용할..
고도 스크립트 개요, 예약어와 연산자에 이은 글이다. ■ 내장 타입 고도 스크립트에서는 기본, 벡터, 엔진, 컨테이너 내장 타입을 지원한다. 대입문에서 데이터를 복사하거나 함수의 인수로 사용할 때의 데이터 전달 방식을 결정한다. 데이터 용량이 큰 배열이나 사전 타입은 값 전달이 아니라 참조 방식으로 수행된다. ☞ 기본 타입 - null : 데이터를 가질 수 없는 빈 타입. - bool : boolean 도 가능. true/false만 가질 수 있다. - int : integer 도 가능. 64비트 정수. - float : 64비트 배정도 실수. - String : 유니코드 문자열. 위의 그림은 기본 타입을 사용하고 있는 예제이다. ☞ 벡터 타입 - Vector2 : x, y 항목을 가진 2D 벡터 타입 ..
고도 게임 엔진에서 캐릭터를 움직이게 하고, 사용자의 동작에 반응하거나 제작자 미리 준비한 시나리오나 시간에 따라 어떤 작업을 수행하는 것은 고도 스크립트(GDScript)에 기반한다. 그러므로 고도 게임 엔진으로 뭔가를 만들고 싶다면 고도 스크립트의 기본적인 문법이나 사용법을 익히는 것은 필수 과정이라 할 수 있겠다. 물론 고도에서 제공하는 비주얼 스크립트나 C# 스크립트를 사용하는 방법도 있지만 고도에서 제공하는 대부분의 데모 프로젝트나 샘플은 GDScript를 사용하고 있다는 한계가 있다. C#에 익숙한 개발자라면 C# 스크립트를 이용하는 것도 상당히 매력적인 선택이지만 이 또한 오픈소스 닷넷 프레임워크인 모노(Mono)를 추가적으로 설치해야 한다는 제약이 있다. 고도 스크립트의 가장 큰 특징 두 ..