기본 콘텐츠로 건너뛰기

1월, 2022의 게시물 표시

템플릿 코드 살펴보기

템플릿 코드 살펴보기 프로젝트 템플릿을 설치 했고, 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 바이너리를 설치해야 한다. 설치 후 다음 명령을 통해 설치가 잘 되어 있는지 확인 할 수 있다....

GDNative와 여러가지 언어들

GDNative와 여러가지 언어들 Godot 엔진에서 Node들의 동작을 프로그램적으로 제어할 수 있는 몇가지 기본언어를 지원하고 있는데, 기본적으로는 GDScript라는 python과 비슷한 문법을 가지는 자체제작된 스크립트와 C# 이다. 이 두가지 외에  GUI만으로도 프로그램 작성이 가능한 Visual Script도 지원하고 있다. 이 외에도 native 언어로 작성된 라이브러리와 상호작용할 수 있는 방법도 제공되고 있는데, 그게 바로 GDNative라는 것 이다. GDNative는 Godot 엔진이 외부 shared library와 상호 작용해서 외부 라이브러리의 함수를 호출하거나, 외부 라이브러리에서 Godot 엔진의 GDNative API를 호출할 수 있게 해 준다. 이 GDNative는 기본적으로 C와 C++ binding용 헤더를 제공해 주기 때문에, C/C++ 외에도 이 언어들과 binding 할 수 있는 다른 언어들도 GDNative를 통해 Godot 엔진과 binding되어 개발할 수 있게 되는 것 이다. GDNative를 통해 여러가지 언어들로 개발이 가능하도록 하는 프로젝트들이 존재하는데, 몇가지 언어를 소개해 보자면 다음과 같다. Rust https://github.com/godot-rust/godot-rust Python https://github.com/touilleMan/godot-python Kotlin https://github.com/utopia-rise/godot-kotlin-native Go https://github.com/godot-go/godot-go 현재는 GDNative에서 GDExtension으로 이름을 바꿔서 다음 버전 개발을 하고 있다고 Godot 블로그에서 소개 를 한 상황인데, 새로운 버젼이 나오면 각 언어 바인딩 프로젝트에서 새로운 버전에 맞게 적용되면 사용이 가능할 것 이다.

[Godot-Rust] Godot-Rust 를 배워보자

Godot-Rust 를 배워보자 최근 Rust 도 배워볼 겸 해서, Godot engine에 사용할 스크립팅 언어로 GDScript 대신 Rust를 사용해 보는 것은 어떨까 하는 생각이 들어서, 하나 둘 자료를 찾아보면서 배워보고 있다. 그런데, 자료가 없는 것은 아니지만 처음 보는 사람이 쉽게 접근할 수 있게 자료가 잘 정리된 것은 찾기가 쉽지 않았다. 그래서, 나중에 내가 찾아봤던 자료도 찾기 쉽게 하고, 또 누군가 나와 같은 시도를 하려고 할 때 약간이나마 도움이 됐으면 하는 생각에 여기에 찾아보고 배운 내용을 정리해서 적어 볼 생각이다. 일단 주제는 생각나는 대로 쭉 적어 봤는데, 정리가 되는 대로 하나씩 링크가 걸릴 예정이다. 아직 링크가 걸리지 않은 주제는 향후 바뀔 수도 있다. GDNative와 여러가지 언어들 Godot-Rust 개발환경 설정하기 템플릿 설치하고 살펴보기 godot-rust-vscode 확장 프로그램 설정 템플릿 코드 살펴보기 Godot-Rust 게임 아키텍처 예제코드 뜯어보기 Hello World Dodge The Creeps 환경 설정 템플릿 코드 정리 Air Combat 각각의 상황별 Godot-Rust 예제 Node 생성하기 Signal 연동 한 Node에서 다른 Node를 가져와서 instance로 사용하기 Autoload 기능을 사용해 자주 접근하는 데이터 읽고 쓰기 이 목록이 더 풍부해 지길 기대해 본다.