타지않는 놀이터

[고도4] Part.1 - 8 적 캐릭터 제작 본문

강좌/Godot 4 - Part.1

[고도4] Part.1 - 8 적 캐릭터 제작

김메가 2024. 2. 17. 13:11

오늘은 액션게임에 빠질 수 없는 적 캐릭터를 만들어보자. 주인공 캐릭터를 제작할 때와 크게 다르지 않으니 지금까지 했던 것들을 복습한다는 느낌으로 진행하자.

 

우선 아래 링크에서 적캐릭터의 그래픽 파일을 다운로드하자.

https://i-mega.itch.io/sideview-dummy-graphics

 

압축을 풀고

 

파일 시스템의 graphic/character에 넣어준다.

 

이제 적 캐릭터를 제작할 것인데 그에 앞서 적 캐릭터를 위한 새로운 씬을 준비하자. 주인공 캐릭터 씬을 제작할 때는 stage_1씬에서 필요한 노드들을 배치한 다음 별도의 씬(player.tscn)으로 분리 시켰지만, 굳이 그럴 필요 없이 처음부터 별개의 씬에서 만들 수도 있다.

 

파일 시스템에서 원하는 폴더를 우클릭하고 [Create New]-[Scene]을 선택하여 해당 폴더에 새로운 씬을 바로 생성할 수 있다.

 

나타난 [Create New Scene]창을 잘 보고 차근차근 따라해서 적 캐릭터 씬을 만들어보자.

 

우선 [Root Type]을 어떤 것으로 할 지 선택하자. 해당 씬의 최상위 노드의 종류를 결정하는데 [2D Scene]을 선택하면 Node2D(2D게임 만들 때 사용), [3D Scene]을 선택하면 Node3D(3D게임 만들 때 사용), [User Interface]를 선택하면 Control(체력바, 버튼 같은 GUI를 만들 때 사용)노드가 최상위인 씬이 생성된다. 하지만 우리는 주인공 캐릭터 씬처럼 CharacterBody2D노드를 최상위로 두는 씬이 필요하기 때문에 스크린샷과 같이 맨 아래 옵션을 선택하고 그 오른쪽 끝의 버튼을 클릭하여 원하는 노드를 지정해줘야 한다. 해당 버튼을 클릭하자.

 

스크린샷과 같이 CharacterBody2D를 찾아 선택한 다음 [Pick]버튼을 클릭하여 [Root Type] 지정을 완료한다.

 

그리고 Scene의 이름을 enemy라고 입력한 뒤 [OK]버튼을 누르면 된다.

 

스크린샷과 같이 character폴더에 enemy.tscn이라는 씬이 생성되고 2D스크린에 해당 씬이 열리면 된 것이다.

 

주인공 캐릭터와 마찬가지로 그래픽을 표시할 Sprite2D노드가 필요하니 최상위 노드를 우클릭, [Add Child Node…]메뉴를 선택하여 Sprite2D 노드를 생성해주자.

 

생성된 Sprite2D의 인스펙터에서 texture속성에 적 캐릭터 그래픽 파일 중 idle_000.png를 찾아 드래그하여 넣어주자.

 

스크린샷과 같이 2D스크린에 적 캐릭터의 이미지가 나타나면 완료

 

적 캐릭터도 애니메이션이 있어야하니 최상위노드 하위에 AnimationPlayer노드도 생성해주자.

 

바텀 패널에서 애니메이션 탭을 열고, 상단의 Animation버튼을 클릭, [New]메뉴를 선택하여 idle이라는 이름의 애니메이션을 만든다.

 

그리고 바텀 패널에 애니메이션 탭이 나타나있는 상태에서 씬 독에서 Sprite2D를 선택, 인스펙터에서 texture속성 오른쪽의 열쇠모양 버튼을 클릭하고 확인창에서 [Create]를 선택하여 idle애니메이션에 Sprite2D노드의 texture속성에 대한 트랙을 추가해주자.

 

texture트랙을 우클릭하고 [Insert Key]메뉴를 선택하여 키프레임을 2개 더 생성해주자. 스크린샷과 같이 총 키프레임의 수가 3개가 되면 된다.

 

바텀 패널의 우측 끝에서 애니메이션의 총 길이를 0.6초로 설정하고 루프버튼을 클릭하여 루프를 활성화하자.

 

이제 3개의 키프레임을 각각 0, 0.2, 0.4초 지점에 위치시키고 두번째와 세번째 키프레임에 각각 idle_001.png, idle_002.png를 지정하자.

 

Idie 애니메이션이 완성되었으니 재생버튼을 클릭해서 제대로 설정되었는지 마지막으로 확인하면 된다.

 

이번에는 이동 애니메이션을 만들자. run이라는 이름의 새 애니메이션을 생성한다.

 

마찬가지로 Sprite2Dtexture속성 트랙을 생성해주고

 

애니메이션의 총 길이를 0.4로 설정 및 루프를 활성화한 다음, 키프레임을 생성하고 각 키프레임간 간격을 0.1초만큼 띄워준다. 그리고 run_000.png ~ run_003.png 이미지들을 각 키프레임마다 설정해주면 된다. 마지막으로 재생버튼을 클릭하여 제대로 만들었는지 확인하면 끝이다.

 

애니메이션은 다 됐고 이제 적 캐릭터의 스크립트를 작성할 차례이다. 파일시스템에서 script폴더에 새로운 스크립트 파일을 생성해주자.

 

스크립트 생성창이 나타나면 CharacterBody2D노드를 상속하도록 지정하고, 스크립트 파일의 이름은 enemy.gd로 지정한 뒤 Create버튼을 클릭하여 마무리한다.

 

파일 시스템에서 enemy.gd를 더블 클릭하여 스크립트를 열어보자.

 

스크립트를 열면 미리 작성되어있는 내용은 맨 윗줄의 extends부분을 제외하고 전부 지워주고

 

스크린샷과 같이 코드를 작성해주자.

 

스크립트가 완성되었으면 파일시스템의 enemy.gd를 드래그하여 enemy씬의 최상위 노드에 붙여준다.

 

그리고 Sprite2D노드의 이름을 스크립트 상에서와 일치하도록 Sprite로 수정하자.

이제 enemy씬이 완성되었다. Ctrl+S 단축키로 저장해주자.

 

스테이지에 완성된 적 캐릭터를 배치해보자. 스크린샷처럼 파일 시스템의 enemy.tscn 2D스크린에 드래그하면

 

우리가 만든 적 캐릭터가 배치된다.

 

여러 번 드래그해서 여러 개 배치할 수도 있다. 원하는 만큼 배치해보자

 

이제 게임을 실행해보면적 캐릭터들이 땅을 뚫고 떨어질 것이다. 충돌 판정을 넣어주지 않았기 때문이다.

 

다시 enemy씬으로 가서 CollisionShape2D노드를 생성해주자.

 

CollisionShape2Dshape속성에서 RectangleShape2D를 선택한다.

 

그리고 충돌 판정의 크기와 위치를 적당히 조정해준다.

 

마지막으로 CharacterBody2D타입인 최상위 노드를 선택하고 인스펙터에서 Layer3(Enemy)으로, Mask1(Ground)으로 설정해주자.

 

이제 enemy씬을 Ctrl+S로 저장하고 stage_1으로 돌아오면, 모든 적 캐릭터들에 enemy씬의 변경사항이 반영되어 각자의 충돌판정이 생긴 모습을 볼 수 있다. 이렇게 씬으로 만들어둔 요소는 여러 곳에서 재사용하기도 좋고 변경사항도 자동으로 반영되어 편리하게 사용할 수 있다.

 

이제 게임을 실행하면 적 캐릭터들이 제대로 땅 위에 서있는 모습을 볼 수 있다.