🦜
Goで3Dゲームエンジン「Lacking」を使う方法
「Lacking」とは
- ほぼPureGoによる3Dゲームエンジン
- ECS(Entity-Component-System)ベース
- Math、Physicsライブラリを内包
- ほぼ同じコードでネイティブ(OpenGL/glfw)でもブラウザでも動作する
- ネイティブオーディオ回りはmini-audio-library依存
- ブラウザではWebGL2、WebAudioを利用している
- 3Dモデルのフォーマットはglfxまたはglbのみサポート
- 必要最低限の機能を抑えたつくり
サンプル
ラリーシミュレーターのデモ
フライトシミュレーターのデモ
キー早打ちによるシューティング
基本的な使い方
プロジェクトのおこしかた
あらかじめ必要なもの
- gcc,g++
- go1.23
- gonew
- task
後者2つのインストール方法
go install golang.org/x/tools/cmd/gonew@latest
go install github.com/go-task/task/v3/cmd/task@latest
プロジェクトを起こす
gonew github.com/nobonobo/lacking-template@latest example.com/your/namespace projectdir
cd projectdir
ネイティブの実行方法
task pack
task run
これで以下のような画面が開く
ブラウザでの実行方法
task webpack
task wasm
task web # -> run http server on 127.0.0.1:8080
http://127.0.0.1:8080 を開くとほぼネイティブと同じ画面になる
フォルダ構成
├── LICENSE
├── README.md
├── Taskfile.yml
├── assets
│ ├── index.html
│ └── web
│ ├── favicon.png
│ ├── main.css
│ ├── main.js
│ ├── main.wasm
│ └── wasm_exec.js
├── cmd
│ ├── game
│ │ ├── app_cgo.go
│ │ ├── app_js.go
│ │ └── main.go
│ └── studio
│ └── main.go
├── content
├── go.mod
├── go.sum
├── internal
│ └── ui
│ ├── bootstrap.go
│ ├── model
│ └── view
└── resources
├── resources.go
├── ui
│ └── images
└── web
├── index.html
├── main.css
├── main.js
└── wasm_exec.js
主なフォルダーと役割
- cmd/: 実行ファイル用のコード置く場所
- internal/: プロジェクトのコアロジックを置く場所
- resources/: プロジェクトで利用するリソース群を置く場所
- assets/: Webサーブ用の臨時静的ファイル置き場
- Taskfile.yml: taskコマンド用タスク設定ファイル
何を作る?
まとめ
- これまでに生まれたGo用3Dゲームエンジンは欲張って多機能化し停滞するパターンを繰り返しています
- このLacking-Engineは3Dゲームエンジンとしては欲張らずにミニマムな作りを保っています
- そのおかげで、少ない依存でGLまわり、オーディオ、物理エンジンなどをネイティブとWebの両方をサポートすることができています
- こういう依存のシンプルさはGoにマッチしていて、このエンジンで書いたコードは多岐にわたる環境で容易に動かすことができます
- ただ、まだ破壊的変更が入る場合もあるとのことなので要注意です
Discussion