목록강좌 (15)
타지않는 놀이터
이번 시간에는 게임을 켰을 때 나타나는 메인 메뉴와 끝까지 클리어 했을 때 나타나는 엔딩 화면을 만들고, 고도엔진을 설치하지 않은 일반 플레이어들이 게임을 플레이할 수 있도록 실행 파일을 만드는 과정을 따라해볼 것이다. 우선 메인 메뉴부터 시작하자. 메인 메뉴를 만들기 위하여 프로젝트 폴더에 새 씬을 하나 생성해주자. Root Type은 User Interface로, 씬의 이름은 main_menu로 설정해주면 된다. 이렇게 씬을 생성하고 열렸으면 Label노드를 생성하고 Anchor preset으로 중앙에 위치시킨 후 인스펙터에서 게임의 제목을 입력하고 글자 크기를 64로 키워준 다음 위치를 중앙에서 살짝 위로 옮겨준다. 이제 게임 시작 버튼을 만들자. Button노드를 생성해준다. 버튼 노드의 크기를 ..
지금까지 우리가 만든 게임은 화면이 고정되어 답답한 느낌을 주고 넓은 맵을 구성하기도 여의치 않다. 화면이 주인공을 따라가도록 개선해보자. 또한 여러 스테이지 간의 이동도 구현해보자. 방법은 아주 간단하다. player씬을 열고 Camera2D노드를 추가한다. 이게 끝이다. 게임을 실행하고 여기저기 움직여보자. 주인공 캐릭터에 붙어있는 카메라 노드가 비추는 대로 화면이 움직이는 모습을 볼 수 있다. 훨씬 커다란 스테이지를 구성해도 주인공 캐릭터가 시야 밖으로 나가지 않으니 문제없을 것이다. 이번에는 여러 스테이지 간의 이동을 구현해볼 것인데, 스테이지가 하나밖에 없으니 또 다른 스테이지를 더 만들어주자. 파일 시스템 독에서 stage_1씬을 우클릭하고 Duplicate메뉴를 선택한다. (또는 단축키 Ct..
지난 시간까지 액션게임의 필수 요소인 공격과 피격을 구현했지만, 수없이 공격해도 적이 쓰러지지 않으니 무의미하기 짝이 없고 아무리 맞아도 주인공이 쓰러지지 않으니 적을 피할 이유가 없다. 이번 시간에는 HP를 구현해서 공격과 피격이 그 의미를 갖게 해보자. 우선 HP가 0이 되었을 때 재생할 애니메이션부터 만들자. 1. player씬을 열고 AnimationPlayer노드를 선택한 다음, dead라는 이름의 새로운 애니메이션을 생성한다. 2. Sprite노드의 texture속성에 대한 트랙을 dead애니메이션에 추가한다. 3. 키프레임 2개를 0.5초 간격으로 배치한다. 4. graphic/character/main_character폴더의 dead_000.png와 dead_001.png 이미지를 각 키프..
이번 시간에는 캐릭터 피격 효과음을 구현하자. https://www.kenney.nl/assets/impact-sounds 우선 효과음 파일을 마련하자. 위 사이트에 접속하여 보라색 [Download]버튼을 클릭하자. 기부를 할 지 그냥 다운로드 할 지 물어보는 글이 나타난다. 만일 기부를 하고 싶다면 보라색의 [Donate]버튼을 클릭하면 되고, 효과음 파일만 받고 싶다면 그 아래의 [Continue without donating…]텍스트를 클릭하면 된다. 다운받은 파일의 압축을 풀고 Audio폴더를 열어보면 수많은 효과음 파일들이 포함되어 있는데, 필자는 impactPlate_medium_004.ogg를 사용하도록 하겠다. 파일 시스템에서 sound라는 이름으로 폴더를 만들고 그 안에 효과음 파일을 ..
이번 시간에는 주인공, 적 캐릭터의 공격 기능과 그에 대응되는 피격을 구현할 것이다. 우선 플레이어의 공격 애니메이션부터 만들자. 1. player씬을 열고 AnimationPlayer노드를 선택한 뒤 attack이라는 이름으로 새 애니메이션을 만든다. 2. Sprite노드의 texture속성에 대한 트랙을 추가한다. 3. attack애니메이션의 총 길이를 0.4로 설정한다. (루프는 활성화시키지 않는다) 4. 키프레임 4개를 0.1초 간격으로 배치한다. 5. graphic/character/main_character폴더의 attack_000.png ~ attack_003.png 이미지들을 각 키프레임에 지정해준다. 공격 애니메이션을 만들었다면 player.gd스크립트를 열고 _process함수의 내용을..
지난 시간에 적 캐릭터를 구현하면서 이동 애니메이션도 함께 제작했는데, 정작 사용되지는 않았다. 오늘은 적 캐릭터가 주인공 캐릭터를 따라가는 기능을 구현하면서 이동 애니메이션도 적용시켜보자. 우선 적 캐릭터가 주인공 캐릭터를 감지하는 영역을 구현하자. enemy씬을 열고 Sprite의 하위에 Area2D노드를 생성해준다. Area2D노드는 특정 영역 내에 물리 노드가 들어왔는지/나갔는지를 체크할 때 사용하는 노드이다. 생성한 Area2D의 이름을 PlayerDetection으로 수정하자. 그리고 인스펙터에서 스크린샷과 같이 Layer와 Mask를 설정한다. 이제 인식 범위를 설정해야 한다. PlayerDetection노드의 하위에 CollisionShape2D를 생성해주자. 인스펙터에서 Collision..
오늘은 액션게임에 빠질 수 없는 적 캐릭터를 만들어보자. 주인공 캐릭터를 제작할 때와 크게 다르지 않으니 지금까지 했던 것들을 복습한다는 느낌으로 진행하자. 우선 아래 링크에서 적캐릭터의 그래픽 파일을 다운로드하자. https://i-mega.itch.io/sideview-dummy-graphics 압축을 풀고 파일 시스템의 graphic/character에 넣어준다. 이제 적 캐릭터를 제작할 것인데 그에 앞서 적 캐릭터를 위한 새로운 씬을 준비하자. 주인공 캐릭터 씬을 제작할 때는 stage_1씬에서 필요한 노드들을 배치한 다음 별도의 씬(player.tscn)으로 분리 시켰지만, 굳이 그럴 필요 없이 처음부터 별개의 씬에서 만들 수도 있다. 파일 시스템에서 원하는 폴더를 우클릭하고 [Create Ne..
이번 시간에는 주인공 캐릭터에 애니메이션을 적용할 것인데, 그에 앞서 캐릭터를 수정, 재사용하기 편하게 스테이지와 분리하자. 우선 파일 시스템에서 character라는 이름으로 폴더를 만들자. 그리고 stage_1 씬에서 Player노드를 character폴더에 드래그한다. 그러면 Player노드와 그 자식노드들이 player.tscn이라는 별개의 씬으로 묶여서 저장된다. 이렇게 씬 내에 존재하는 노드들을 묶어서 또 다른 씬으로 만들 수도 있다. stage_1씬을 열 때와 마찬가지로 파일 시스템에서 player씬을 더블클릭하여 열어보자. 그리고 player씬의 루트 노드(해당 씬의 최상위 노드)인 Player노드를 선택하고 인스펙터에서 Transform 속성들을 초기값으로 설정하고 저장(Ctrl+S)하자..