기본 콘텐츠로 건너뛰기

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
cs

위 명령들을 하나씩 살펴보면,
  • cargo generate 를 이용해서 기본 템플릿을 이용한 프로젝트 폴더를 생성한다.
  • 만들어진 프로젝트 폴더로 이동
  • cargo make run 명령을 이용해 빌드 및 실행
cargo generate  를 이용해 프로젝트를 생성했을 때, 기존 템플릿은 make를 이용했기 때문에, gdnative 문서 페이지를 보면 make run  으로 빌드 및 실행 명령어가 안내되어 있지만, 최근 cargo build를 이용하는 방식으로 변경이 되어서 이제는 cargo make run 을 이용해서 실행해야 빌드 및 실행이 적절하게 동작 한다.

기존에는 비어있는 화면 이었는데, 최근 커밋에는 기본으로 spinning cube 가 동작하도록 되어 있어서 최신 소스 기반으로 실행을 한다면 아래의 하면을 볼 수 있다.

실행 화면 (기본으로 들어 있는 Spinning Cube)

로그가 나오고 있는 터미널

여기까지 동작이 되었다면, 일단 정상적으로 프로젝트 템플릿이 복사되었다는 것을 확인 할 수 있다. 이제, 개발을 위한 설정을 조금 더 진행 해 보자.

개발 환경 설정

이제 개발환경을 설정 할 시간이다. 프로젝트 폴더의 rust 폴더로 이동한 후, code . 명령을 이용해서 VSCode 를 실행 시키자.

dependency 설정 변경

최근 gdnative 버젼이 0.10.0 으로 변경이 되면서, cargo.toml 파일에서 권장하는 설정이 변경 되었다. 다음과 같이 공식 문서에서 권장하는 설정으로 cargo.toml file을 변경한다.

[dependencies]
gdnative = "0.10"
 
[lib]
crate-type = ["cdylib"]
cs

프로젝트 파일 생성 및 수정

우선 godot-rust 확장을 이용해서 프로젝트 파일을 생성한다. godot-rust 확장을 설치하고 이를 애용해서 프로젝트 파일을 생성하는 방법은 이전 포스트를 참고하면 된다. 여기서, 문제가 되는 부분은 위에서 템플릿을 실행할 때도 발생했는데 최근 빌드 방식 변경으로 인해 make 가 아닌 cargo build를 해야 한다는 사실이다. 하지만 아직까지 godot-rust 확장에 이 부분이 적용되지 않아서 기존 make 방식으로 커멘드들이 적용되어 있어서 이부분을 수정해 줘야 한다.

task.json 수정

task.json 파일을 열면, 이 프로젝트에서 실행할 수 있는 task들이 정의되어 있다. 이 중 build 관련된 부분의 명령어를 수정해 주면 된다. Build debug, Build Release, Clean 항목에서 command: "make build-${config:godot-rust.build.targetPlatform}-......"  와 같은 명령어 실행이 정의되어 있는 부분이 보이는데, make 앞 부분에 cargo 명령을 추가 해 주면 된다. 

아래는 Build Debug 항목을 수정 한 예 이다.
"command": "cargo make build-${config:godot-rust.build.targetPlatform}-debug",

cs

이렇게 수정한 후, task를 수행 하거나 F5를 눌러 디버깅을 수행 할 수 있다.

launch.json 수정

디버깅을 수행할 때 간혹 디버깅 포인트가 실제로 디버깅할 때 잡히지 않는 경우가 있었다. 이런 경우엔 디버거 타입을 lldb 에서 cppdbg 로 변경해 보길 바란다.

{
"version": "0.2.0",
"configurations": [
{
"name": "Debug Game",
"preLaunchTask": "godot-rust: Build Debug",
"type": "cppdbg", //<- here
"request": "launch",
"program": "${config:godot-rust.environment.godotEditorPath}",
"cwd": "${config:godot-rust.environment.godotProjectPath}",
"presentation": {
"group": "Debug",
"order": 1
}
},
cs

이제, Dodge The Creep을 Rust로 만들어 볼 준비를 모두 마쳤다.





댓글

이 블로그의 인기 게시물

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 바이너리를 설치해야 한다. 설치 후 다음 명령을 통해 설치가 잘 되어 있는지 확인 할 수 있다....

[C#] 자동으로 특정 팝업창 닫기

[C#] 자동으로 특정 팝업창 닫기 Windows UI 테스트 혹은 자동화 작업을 할 때, 특정 윈도우창 혹은 팝업창이 뜨는 것을 인지 하고, 내용을 얻거나 버튼을 누르려면,  System.Windows.Automation 의 AddAutomationEventHandler 를 사용하면 된다. Hook 설정 4 번째 라인에서 WindowOpendEvent를 설정 함 으로써, 창이 열릴 때 hook이 걸린다. 7 번째 라인에서 event handler를 등록 한다. Event Handler 설정 8 번째 라인에서 element의 이름이 내가 찾는 이름인지 비교한다. 15번째 라인에서 팝업창의 내용을 출력 한다. 22번째 라인에서 팝업창의 자식 element중에 "N" 문자가 포함된 것 즉, 아니오 버튼을 찾는다. 24~25번째 라인에서 버튼을 누르는 동작을 수행 한다.

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 코드가 이미 있는 경우, 시작하기 쉽다....