기본 콘텐츠로 건너뛰기

Dodge The Creep - [2]

Dodge The Creep - [2] 템플릿 정리하기 Template 정리 본격적으로 tutorial 을 따라하기 전에 우선 프로젝트 설정을 위해 복사해 놓은 template code를 정리할 필요가 있다. 현재 이 template 코드에는 삼차원 큐브가 회전하고 있는 상태이고, rust code의 경우 이 글을 작성하고 있는 현재 시점에서는 에러를 포함하고 있기도 하다. Godot Project Godot 엔진 에디터를 시작해서, 만들어 놓은 프로젝트 폴더의 godot 폴더 안에 있는 project.godot 파일을 열어서 프로젝트를 로딩한다. 왼쪽 하단의 FileSystem 영역을 보면 폴더 구조로 resource들이 나열되어 있는데, res://scenes 아래에 Game.tscn과 SpinningCube.tscn 두개의 scene 파일이 들어 있는 것이 보일 것 이다.  여기서, SpinningCube.tscn은 불필요 하기 때문에 지운다. 그리고나서, Game.tscn 파일을 열어보면 왼쪽 상단 Scene 텝에 scene에 포함된 노드들이 보이는데, 루트노드는 Spatial 타입의 노드이고, 그 밑으로 Camera 와 SpinningCube 노드들이 붙어 있는 것이 보일 것 이다.  우선 Camera와 SpinningCube 노드들워준 후, Game 노드의 타입을 Node2D 타입으로 변경 해 준다. 이제 Godot project 의 정리는 완료 되었다. Rust project 이제 Rust project를 정리해 볼 차례다. 프로젝트 폴더 아래 rust 폴더를 VSCode로 열어보자. 왼쪽 파일 탐색기를 보면, src 폴더아래에 세개의 .rs 파일이 존재 하는 것을 볼 수 있다. 이 중, spinnig_cube.rs를 지우고, lib.rs 안에서 spinning_cube.rs 파일을 호출 하는 부분들을 지워주자. lib.rs 파일을 열면, spinnig_cube 모듈을 로딩 하는 부분과, Godot에 노출하는 클래스로 등록하는 부분...
최근 글

Dodge The Creep - [1]

Dodge The Creep - [1] 환경 설정 Godot 공식 문서에 나와있는 2D 튜토리얼인 Dodge The Creep 게임을 Rust를 이용해서 따라 만들어 보자. 템플릿 복사 및 실행 우선 프로젝트 셋업을 해야 한다. 이 부분은 Rust를 이용한다고 해도 크게 바뀌는 부분은 없다. 하지만, GDScript를 이용한다면, Godot Editor를 이용해서 처음부터 하면 되겠지만, Rust를 이용하기 때문에 우선 cargo를 이용해 기본 프로젝트 template를 만들고 난 후, 생성된 godot 폴더에서 프로젝트 설정을 수정하도록 한다. $ cargo generate  - - git https: / / github.com / godot - rust / godot - rust - template  - - name dodge - the - creep - rust $ cd dodge-the-creep-rust $ cargo make run Colored by Color Scripter cs 위 명령들을 하나씩 살펴보면, cargo generate 를 이용해서 기본 템플릿을 이용한 프로젝트 폴더를 생성한다. 만들어진 프로젝트 폴더로 이동 cargo make run  명령을 이용해 빌드 및 실행 cargo generate   를 이용해 프로젝트를 생성했을 때, 기존 템플릿은 make를 이용했기 때문에, gdnative 문서 페이지를 보면  make run   으로 빌드 및 실행 명령어가 안내되어 있지만, 최근 cargo build를 이용하는 방식으로 변경 이 되어서 이제는 cargo make run  을 이용해서 실행해야 빌드 및 실행이 적절하게 동작 한다. 기존에는 비어있는 화면 이었는데, 최근 커밋 에는 기본으로 spinning cube 가 동작하도록 되어 있어서 최신 소스 기반으로 실행을 한다면 아래의 하면을...

Godot-Rust 게임 아키텍처

이 글은 The godot-rust Book 의 Game architecture 에 나온 내용을 다시 정리한 내용이다. godot-rust는 사용자에게 많은 자유를 주고 있기 때문에 어떤 패턴을 강요하지 않는다. GDScript나 Rust를 얼마나 많이 사용할 지는 순전히 사용자에게 달려 있다. GDScript와 Rust 의 장단점 비교 GDScrip 장점: 고도 에디터와 잘 통합되어 있어 빠른 프로토타이핑이 가능하다. 단점: 타입 시스템이 제한적이고 리펙터링은 수동으로 해야 한다. 종속성 관리가 없다. Rust 장점: 성숙한 도구와 에코시스템에 기반한 타입 안정성, 성능, 확정성에 중점을 두고 있다. 단점: 언어가 좀 더 복잡하고 제약이 강하며, Godot과 연관된 부분은 장황해 지는 경향이 있다. 즉, GDScript는 Godot엔진과 잘 통합되어 있고 쉽고 빠른 코드작성이 가능한 반면, 타입 안정성 부족으로 인해 코드의 규모가 커진 경우 안정적인 관리가 어렵고 속도가 느린 단점이 있다. 다음은 Godot 엔진에 Rust를 사용하는 방법들에 대한 몇가지 예시들 이다. Godot game + Rust module 이구조는 대부분의 게임은 Godot engine과 GDScript로 만들고 일부 모둘만 Rust를 사용해 개발 하는 방법이다. Rust로 개발할 만한 부분을 예로 들면 다음과 같은 경우를 들 수 있다. GDScript가 충분히 빠르지 않은데, 해당 코드가 성능에 민감한 경우. pathfinding, AI, 물리 관련과 같은 Rust기반 라이브러리를 사용하고 싶은 경우. GDScript로는 관리하기 어려운 매우 복잡한 코드블럭이 있는 경우. 이런 경우들에서는 딱 원하는 만큼만 Rust를 이용해 작성할 수 있다. godot-rust 는 필요한 만큼만 GDScript에 노출되도록 할 수 있다. Rust 코드에서 Godot 코드를 호출하는 경우는 없는 경우다. 이런 경우 장단 점은 다음과 같다. 장점 Godot 코드가 이미 있는 경우, 시작하기 쉽다....

템플릿 코드 살펴보기

템플릿 코드 살펴보기 프로젝트 템플릿을 설치 했고, VSCode를 위한 확장 프로그램도 잘 설정을 완료해서 이제 실행 및 디버깅까지 되는 것을 확인했다. 그럼, 이제 코드가 어떻게 생겼는지 한번 살펴볼 차례다. 폴더 구조 위와 같이 루트에 Cargo.toml 이 있고, src 폴더에 lib.rs, game.rs 파일이 있고, tests 폴더에 기본으로 생성된 gd_test_main.rs 파일이 있는 것을 볼 수 있다. Cargo.toml 기본으로 패키지 정보와 라이브러리 그리고 의존관계가 있는 라이브러리 정보가 들어 있다. 잘 봐야 하는 부분은 의존성 부분인데, gdnative 버젼이 "0.9.3"으로 되어 있다. 하지만, 깃헙 에 있는 프로젝트 readme.md 파일에 있는 Engine compatibility를 보면 Godot 3.2 버젼부터 모든 릴리즈된 마이너 버젼과 호환성을 유지한다고 되어 있고, Godot 3.4 버젼은 별다른 설정없이 사용 가능하다고 되어 있다. 하지만 아래쪽 Usage 항목을 보면 최신 마스터 버젼과 Godot 3.4버젼을 사용하는 것 을 권장 하고 있으며, 이 때 의존성 항목에서 gdnative 의 벼전을 지정하는 대신 아래와 같이 git 주소를 적는 것으로 대신하면 된다. 앞선 템플릿에 적혀있는대로 사용하는 것은 Godot 3.2.3-stable 버젼을 사용할 때만 유용하다. 즉, Godot을 최신버젼으로 사용하려면 gdnative 버젼을 명시하는 대신 git 주소를 사용하고, 좀 더 안정적으로 사용하고 싶은 경우에는 gdnative 버젼을 0.9.3으로 명시하고, Godot 엔진의 버젼도 3.2.3-stable 버젼을 사용하면 된다. lib.rs 우선, main.rs 대신 lib.rs가 있으므로 이 rust 프로젝트가 라이브러리 프로젝트라는 것을 알 수 있다.  하는 일을 보면, 11라인에서 godot_init! 매크로를 통해 init 함수를 넘겨주고있다. 이 init함수...

godot-rust-vscode 확장 프로그램 설정

godot-rust-vscode 확장 프로그램 설정 이제 VSCode에서 Rust Project를 어떻게 열어야 할지 살펴보자. 어느 폴더에서 프로젝트를 열어야 할지는 개발자 마음대로 해도 된다. 하지만, 이미 앞에서 godot-rust-vscode 확장 프로그램을 설치 했으니 이 확장 프로그램을 이용하기 편한 상태로 프로젝트를 여는 것이 좋을 것 이다. godot-rust-vscode 확장 프로그램은 사용자가 루트 폴더에서 VSCode를 실행시키는 것이 아닌 root아래에있는 rust폴더에서 VSCode를 실행시키는 것을 가정하고 있으므로, rust 폴더로 이동 후 VSCode를 실행 시킨다. godot-rust-vscode 환경 설정 VSCode가 열리면 확장 프로그램의 환경 설정이 필요하다. 우선, ctl+. 를 눌러서 설정 화면으로 진입한 후, 설정 검색란에 godot-rust 라고 입력하여 관련 설정만 나타나게 한다. 그러면, 아래 그림처럼 다섯가지 설정만 나타나게 되는데 각각 자신의 시스템에 맞게 설정하면 된다. godot-rust-vscode 확장 프로그램의 설정화면 하나씩 살펴보자. Target Platform 이 프로젝트가 어떤 타겟을 대상으로 빌드될지 선택하면 된다. 나는 개발중엔 컴퓨터에서 로컬 빌드를 하면서 진행 할 것 이기 때문에 x86_64-unknown-linux-gnu를 선택 했다. 각자 자신이 원하는 타겟을 설정하면 된다. Target Platform Custom 위의 옵션에서 custom을 선택했을 경우 여기에 custom target을 적으면 된다. Godot Editor Path 내 컴퓨터에 설치되어 있는 godot 엔진의 실행파일의 위치와 실행파일명까지 적으면 된다. 내 경우는 환경변수 GODOT_HOME에 godot실행파일의 위치가 들어 있어서, 환경변수를 이용해서 설정했다. 각자 자신이 어느 폴더에 godot파일을 저장해 놓고 사용하는지에 따라 적절하게 설정하면 된다. Godot Project Path 현재 열려있는 r...

템플릿 설치하고 살펴보기

템플릿 설치하고 살펴보기 이제 필요한 도구들은 다 설치를 했으니, 잘 동작하는지 확인을 해 볼 차례다. 우선, 터미널을 열고 다음과 같이 임력해서 cargo-generate를 이용해 기본적인 프로젝트 템플릿을 만들어보자. 제대로 템플릿이 만들어 졌다면, 다음과 같은 폴더 구조로 되어 있을 것을 확인 해 볼 수 있다. 폴더들과 그 안에 들어있는 내용을 살펴보자. . /(root) 우선 최상위 폴더에 Cargo.toml 파일과 Makefile이 위치해 있다. Cargo.toml 파일은 단지 하위 rust 폴더를 작업공간으로 하고, godot폴더를 작업공간에서 제외 시키고 있다. Makefile은 각종 빌드명령들이 정의되어 있다. 쭉 살펴보면, 아래쪽에 run 명령어가 보일 것 이다. 자신의 시스템에 맞게 설정이 되어 있을텐데, 내 경우엔 build-x86_64-unknown-linux-gnu-debug 명령을 실행 한 후, dogot 엔진을 실행시키고 있다. 이 build-x86_64-unknown-linux-gnu-debug 명령도 위에서 찾아보면, cargo build로 build를 하고난 후 결과로 나온 라이브러리 파일을 lib 폴더에 옮겨놓는 작업을 하고 있다. 간단히 다시 정리해 보면, make run을 실행해서 rust로 작성된 파일을 build해서 lib 폴더에 옮겨놓고 godot 엔진을 실행 시켜서 내가 작성한 코드를 실행 시킬 수 있다. bin 컴파일된 결과(*.so)가 target 시스템에 따라 저장되는 곳 이다. rust cargo build 를 통해 library file이 생성되면 이곳에 저장이 된다. godot godot project 가 위치한 곳 이다. project.godot 파일이 존재하기 때문에 이곳을 지정해서 godot engine을 실행하면 작성한 프로젝트가 실행 되게 된다. lib godot에서 사용될 수 있도록, 컴파일된 rust 프로젝트의 결과(*.so)가 복사되는 곳 이다. 이 곳 역시 어떤 target으로 컴파...

Godot-Rust 개발환경 설정

Godot-Rust 개발환경 설정 우선은 개발환경을 설치해 보면서 하나씩 배워보면 좋을 것 이다. 공식 홈페이지에 Godot 과 Rust 개발환경을 설정하는 방법이 자세히 나와있으니 각각 따라서 잘 설치하면 되지만, Godot과 Rust를 동시에 사용하기 위한 내용을 포함해 다시 정리해 본다. 앞선 게시물에서 Godot에서 C/C++ 바인딩을 위해 GDNative와 헤더를 제공한다고 적었는데, 이를 통해 Rust도 Godot과 바인딩해서 사용할 수 있다. 직접 GDNative와 바인딩 하는 것을 할 수도 있겠지만, 이미 godot-rust 오픈소스 프로젝트에서 안정적으로 바인딩된 상태이므로 이 프로젝트를 사용하면 다시 바인딩 할 필요없이 제공되는 gdnative crate를 사용함으로써 쉽게 Rust를 이용해 Godot 개발을 할 수 있다. Godot Engine Godot 공식 다운로드 페이지 에서 자신의 OS에 해당하는 이미지를 받아서 적절한 폴더(예들들어, ~/Godot/)를 만들고 집어 넣는다. 어느곳 에서도 실행 할 수 있도록, 환경변수에 path를 설정한다. The godot-rust Book  페이지에는 3.2.3-stable을 지원하고 있다고 되어 있는데, 이는 cargo의 dependency에 gdnative crate 버젼을 0.9.3 으로 명시했을때고, 그렇지 않고 github의 주소를 적으면, 3.4.2 (이 글을 작성하는 최신버전) 까지도 문제없이 동작한다. Rust rustup  을 방문하면, rust 에서 공식적으로 제공하는 설치 이미지를 통해 Rust toolcahin을 설치 할 수 있다. (Ubuntu인 경우 curl 을 통해 받아서 설치됨) 설치 후 다음과 같은 명령어를 통해 잘 설치 되었는지 확인할 수 있다. LLVM godot-rust 는 LLVM에 기반한 bindgen을 기반해 바인딩 되어 있기 때문에, LLVM 바이너리를 설치해야 한다. 설치 후 다음 명령을 통해 설치가 잘 되어 있는지 확인 할 수 있다....