본문으로 이동
  • 토론란발전소에서 진행되는 토의에 많은 참여 바랍니다.
  • 2024년 2월 16일부로 TemplateSandbox 확장 기능을 설치하였습니다. 문제가 발생하면 오락실로 제보 바랍니다.

사용자:Senouis/고도3 도큐먼트/튜토리얼 4장

리버티게임, 모두가 만들어가는 자유로운 게임

이전 장으로

이 게임은 현재 수리(패치) 중입니다!
2024년 09월 30일 00시 00분 00초까지 수리하기로 한 게임입니다.
"사용자:Senouis/고도3 도큐먼트/튜토리얼 4장" 수리에 대한 문의 사항은 이곳에서 받고 있습니다.

애셋 가져오기[편집 | 원본 편집]

고도 엔진에서는 기본적으로 이미지 파일, 사운드 파일, 폰트 파일 등을 게임 내에서 사용하는 데이터인 애셋(Asset)으로 부릅니다. 이들은 윈도우나 리눅스, 또는 웹 게임으로 내보낼 때 기본적으로 애셋 묶음 파일(pck 파일)에 포함합니다. 이들은 3장 마지막에 잠깐 설명한 하위 리소스들로 노드에서 사용합니다. 예를 들어 Sprite 종류의 노드는 하위 리소스로 이미지 파일을 사용하며, 이 하위 리소스를 텍스처(Texture)라고 부릅니다.


이것들을 변경할 경우 고도 엔진 에디터는 자동으로 변경한 부분을 인식하고 가져옵니다. 정말 놀랍죠? 그러나 이것 이외에도 고도 엔진에는 애셋을 가져올 때 추가적인 처리를 할 수 있는 경우가 있습니다. 왼쪽 위에 있는 노드 트리 칸에 있는 '가져오기' 탭의 기능을 설명하겠습니다.

이미지[편집 | 원본 편집]

이미지를 자른 조각인 스프라이트(Sprite)는 글을 적은 텍스트(Text)와 함께 게임 내 필수 요소 중 제일 중요합니다. 왜냐하면 대화로 조작하는 일부 게임을 제외하면 보이는 것이 있어야 게임을 할 수 있으니까요. 고도 엔진에서는 자주 바꿀 필요가 없는 정지된 이미지를 위해 Sprite, Sprite3D 2개의 클래스와, 애니메이션 재생에 필요한 AnimatedSprite, AnimatedSprite3D 클래스가 있습니다. 3D가 붙은 것은 3D 게임에서 평평한 이미지를 그리는 클래스라 3D 뷰포트에 대한 지식이 필요하기 때문에, 2D 게임 제작을 목표로 하는 이번 튜토리얼에서는 다루지 않겠습니다.

Sprite[편집 | 원본 편집]

이전처럼 자식 노드 추가를 루트 노드에 마우스 오른쪽 클릭을 해서 그 밑에 스프라이트를 추가합시다. Sprite를 검색하고, 파란 스마일 이모티콘이 달린 Sprite를 선택하고 아래 만들기 버튼을 누릅시다.

그렇게 루트 노드 밑에 들여쓰기된 Sprite가 추가됩니다. 이제 오른쪽의 인스펙터(속성 창)을 볼까요?


가장 먼저 보이는 건 TextureNormal Map이 아닐까 합니다. 이 중 Texture가 중요합니다. 왜냐하면 여기에 게임에 띄울 그림 데이터가 들어가거든요!

Texture 옆에 '[비었음]'을 누르면 팝업 메뉴가 뜨고 여러 종류의 Texture를 새로 만들어야 할 것 같기도 합니다. 그러나 보통은 여러분의 SSD/하드디스크에 들어있는 이미지를 가져와야 하기 때문에, 한참 아래에 있는 불러오기를 선택하고 넣을 이미지를 여러분의컴퓨터 드라이브에서 찾아봅시다.


이제 그림 데이터를 가져왔습니다. Texture 밑의 Normal Map(노말 맵)의 경우 똑같이 이미지를 가져오긴 하지만, 이건 조금 특별한 이미지를 가져와야 합니다. 바로 Texture와 동일한 모양과 크기에, Texture가 화면에서 튀어나오거나 들어간 듯한 효과를 주는 이미지입니다. 이 이미지는 전체적으로 파랗고, 일반적으로 만드는 데에 상대적으로 시간이 더 걸리지만, 만들어서 적용할 경우 조금 있다 설명할 라이팅(Lighting)을 사용할 수 있게 됩니다. 하지만 지금은 그보다 더 급한 문제가 있습니다.


바로 이미지 '전체'가 보인다는 겁니다. 아까 스프라이트는 이미지를 '자른' 것이라고 했었죠? 그렇다면 Sprite의 이미지 자르기는 어떻게 하는 걸까요? 바로 그 밑에 있는 Offset과 Region을 사용하면 됩니다.

offset은 이미지가 현재 위치에서 얼마나 엇나가는지 표시하는 값입니다. x 방향은 0보다 크면 오른쪽으로 치우치고, 0보다 작으면 (-1, -2, ...) 왼쪽으로 치우칩니다. y 방향은 0보다 크면 아래로 치우치고, 0보다 작으면 위로 치우칩니다. 'Flip H'의 경우 옆의 작은 상자(체크 상자)를 누르면 이미지가 좌우로 뒤집히며, 'Flip V'는 이미지가 위아래로 뒤집힙니다. 그러나 이건 이미지가 화면에서 표시되는 위치를 조정할 뿐입니다. 다만 좀 더 세세하게 자를 때 도움이 됩니다. 보통 centered에 체크된 상태(v 표시된 상태)에서 이미지를 뒤집습니다.


우리가 원하는 진짜 기능은 바로 Region입니다. Region을 클릭하면 Enabled가 보일 텐데 오른쪽 체크 상자를 눌러 v 표시를 해주고, Rect의 w와 h를 원하는 크기가 되도록 값을 맞추면 이미지의 가장 왼쪽 위 부분의 그림이 보입니다[1] 그 다음, 위에서 offset을 조정할 때처럼 Rect의 x와 y를 적절하게 바꿔서, 원하는 위치를 자르도록 조정합니다.

그럼 이제 화면에 표시되는 크기도 조절할 수 있습니다. 그 밑에 Transform이 있는데, Rotation Degree를 좌우로 움직여서 자른 그림을 돌릴 수 있고, Position에서 x(가로), y(세로)를 조정해서 화면에 보이는 위치를 바꿀 수 있습니다. Scale 값을 조정해 크기를 크게 하거나, 작게 하거나, 양 옆으로 찌그러지게 할 수 있습니다!


Z Index의 경우는 좀 복잡한데, 화면에 그리는 순서를 결정합니다. 숫자가 클 수록 나중에 그립니다. 이건 보통 플레이어를 나무 같은 다른 물체 뒤에 숨은 것처럼 보이게 할 때 플레이어보다 물체의 Z Index를 더 크게 만드는 식으로 사용합니다. 그럼 플레이어 뒤에 그려져야 하는 배경 그림은 플레이어보다 작은 Z Index를 가져야겠죠?

Visibility와 Material은 지금은 건드릴 필요가 없습니다. 지금은 Visible 같은 건 그대로 v 체크해서 이미지가 보이는 상황으로 두고, Modulate나 Self Modulate를 건드리면 플레이어 그림이 전반적으로 붉어지거나, 파래지는 경우를 만들 수 있습니다만, 이 부분에 대해 설명하지 않겠습니다. 왜냐하면 제대로 다루려면 프로그래밍에 관해 더 이야기해야 하기 때문입니다. 7장에서 타이머를 다루면서 플레이어가 맞았을 때 Modulate를 바꾸는 식으로 함께 다루겠습니다.

그럼 이제 정적인 이미지는 됬고, 애니메이션이 있는 그림을 다룹시다.

AnimatedSprite[편집 | 원본 편집]

사운드[편집 | 원본 편집]

고도 엔진 3에서는 기본적으로 AudioStreamPlayer라는 클래스를 가진 노드가 음악을 재생합니다. 그리고 특정한 위치에 플레이어가 다가갔을 때 들어야 하는 소리를 재생한다면 2D 게임에서는 AudioStreamPlayer2D, 3D 게임에서는 AudioStreamPlayer3D가 그런 음악의 재생/정지를 담당합니다[2].

라이팅[편집 | 원본 편집]

그 외[편집 | 원본 편집]

하위 리소스를 노드에서 다루기[편집 | 원본 편집]

그러나 이렇게 가져온 하위 리소스를 그냥 사용하는 경우는 드뭅니다. 보통 일부분만 추출해서 사용합니다. 이제 주요 노드 별로 가져온 하위 리소스를 노드에서 사용하는 속성값(attribute)을 지정하는 방법을 알아봅시다.

local to scene[편집 | 원본 편집]

하위 리소스를 유일하게 만들기[편집 | 원본 편집]

다른 씬을 하위 노드로 만들기[편집 | 원본 편집]

임포트되지 않는 파일들을 게임 패키지에 포함하기[편집 | 원본 편집]

텍스트 파일(txt 확장자) 등은 기본적으로 고도 엔진에서 애셋으로 포함하지 않으며, 내보내기 과정에 포함하도록 설정을 하지 않으면 애셋 묶음(pck 파일)에 포함되지 않습니다.

이것들을 애셋으로 포함하려면 다음과 같은 방법을 따릅니다.

다음으로[편집 | 원본 편집]

다음 장으로

  1. 만약 이렇게 했는데 그림이 안 보인다면 여러분이 가져온 그림의 왼쪽 위가 비어있는 것입니다.
  2. 고도 엔진 4의 경우에는 인텔의 CPU 관련 보안 취약점으로 인해 SharedArrayBuffer에 데이터를 담기 힘들어지면서 동시에 엔진 내 음악 재생 관련 이벤트 콜백 처리가 어려워지고 일부 브라우저에서 음악 재생이 제대로 되지 않는 버그가 있었습니다. 이에 따라 4.3 버전부터 단 하나의 배경음악과 나머지 짧은 효과음을 각각 AudioStreamPlayer2D/AudioStreamPlayer3D와 SamplePlayer2D/SamplePlayer3D 클래스로 구분하여 음악 데이터를 넣고 재생해야 합니다. 그러나 이 튜토리얼은 고도 엔진 3을 중점으로 다루므로, 이렇게 변경한 부분에 대한 자세한 사용법은 언급하지 않겠습니다.