프로젝트 소개
# Born React Native Godot
React Native Godot는 React Native 앱 안에 Godot 엔진을 내장할 수 있게 해줍니다. [Born](https://born.com)이 만들고 [Migeran](https://migeran.com)이 협력하여 개발했습니다.
## 주요 기능
* [LibGodot](https://github.com/migeran/libgodot) 기반으로 Android와 iOS를 지원합니다.
* Born에서 프로덕션으로 사용 중이며 수백만 사용자에게 서비스를 제공합니다.
* Godot 엔진을 시작, 중지, 재시작할 수 있으며, 재시작할 때마다 다른 Godot 프로젝트를 로드할 수 있습니다.
* 실행 중인 Godot 인스턴스를 일시정지하고 재개할 수 있습니다.
* Godot은 별도 스레드에서 실행되어 UI와 React Native JavaScript 스레드의 응답성을 유지합니다.
* Godot 메인 창과 하위 창을 같은 화면이나 다른 화면에 임베드할 수 있습니다.
* TypeScript/JavaScript에서 전체 Godot API에 접근할 수 있습니다: 객체 인스턴스화, 메서드 호출, 속성 가져오기/설정, 시그널 연결, JS 콜러블을 Godot에 전달.
## 예제 앱 시작하기
[예제 앱](example/)은 주요 기능을 보여줍니다. 사전 요구 사항(예: Node, Java, Gradle, Ruby용 ASDF)을 설치하고 Godot 샘플을 내보낸 후(`./export_godot_GodotTest.sh android|ios` 등), 사전 빌드된 라이브러리를 다운로드하고 `yarn ios` / `yarn android`로 iOS 또는 Android에서 평소처럼 실행합니다. 편의를 위한 `update_deps.sh` 스크립트가 설정을 처리합니다.
## 첫 React Native Godot 앱 만들기
1. npm에서 설치: `yarn add @borndotcom/react-native-godot`
2. 사전 빌드된 LibGodot 패키지 다운로드: `yarn download-prebuilt` (npm으로 배포되지 않음; 커스텀 빌드 가능).
3. 뷰 가져와서 사용: `import { RTNGodot, RTNGodotView, runOnGodotThread } from "@borndotcom/react-native-godot"`.
4. `<RTNGodotView style={...}/>` 추가 (기본값은 Godot 메인 창).
5. 명령줄 인수로 `RTNGodot.createInstance([...])`를 호출하여 Godot 스레드에서 Godot 초기화. 핵심 사항:
- React Native에 임베드하려면 `--display-driver embedded` 사용.
- Android에서는 폴더 경로(예: `--path /main`) 또는 PCK 전달; iOS에서는 팩 파일과 함께 `--main-pack` 사용. 런타임 다운로드 방식이 크기와 업데이트 측면에서 권장됩니다.
6. Godot 스레드에서 `RTNGodot.destroyInstance()`로 중지; JS 메인 스레드에서 `RTNGodot.pause()` / `RTNGodot.resume()`로 일시정지/재개.
Godot 프로젝트를 PCK 또는 ZIP으로 내보내세요; 예제에는 도우미 스크립트가 포함되어 있습니다.
## Godot API 사용법
`RTNGodot.API()`로 API에 접근합니다:
```typescript
let Godot = RTNGodot.API();
var engine = Godot.Engine;
var vector = Godot.Vector2();
vector.x = 1.0; vector.y = 2.0;
var sceneTree = engine.get_main_loop();
var root = sceneTree.get_root();
```
`.connect(function() { ... })`로 시그널을 연결하고, JS 함수를 Callable로 Godot 메서드에 전달할 수 있습니다(예: 커스텀 Node의 GDScript에서).
## 스레딩과 JavaScript
Godot은 자체 스레드에서 실행됩니다. JavaScript에서 상호작용하려면 라이브러리가 [react-native-worklets-core](https://github.com/margelo/react-native-worklets-core)를 사용하여 `runOnGodotThread()`를 통해 Godot 스레드에서 workletized JS를 실행합니다. 이것이 권장 방식입니다. RN 메인 스레드에서 직접 호출도 가능하지만 제한적이며(예: Scene Tree 접근은 스레드 안전하지 않음), 객체 참조는 컨텍스트 간에 교환할 수 없습니다.
## 고급 주제
* **커스텀 LibGodot 빌드**: LibGodot 클론(브랜치 `libgodot_migeran_45`), 제공된 스크립트로 빌드, 환경 변수(예: `LIBGODOT_XCFRAMEWORK_PATH`)로 다운로드 경로 재정의.
* **네이티브 코드 디버깅**: iOS는 dev LibGodot을 빌드하고 Xcode에서 중단점 설정; Android는 심볼 디렉터리 추가 및 Godot 소스 트리 심볼릭 링크 선택.
* **Godot 에디터 원격 디버깅**: `--remote-debug tcp://<host>:6007` 전달, Android에서는 `adb reverse` 사용; iOS에서는 에디터의 Remote Host 설정.
## 라이선스
MIT 라이선스로 배포됩니다.
## 지원
상업적 지원 및 개발은 [Migeran](https://migeran.com)이 제공합니다. Born은 React Native 엔지니어를 채용 중입니다([born.com](https://born.com) 참조).
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.