はじめに
Ebiten は、Goで書かれた非常にシンプルな2Dゲームライブラリです。(公式サイト: https://ebiten.org )
圧倒的な安定性を誇り、今2Dゲームを作るなら非常にオススメ! というわけで、改めて紹介記事を書いてみます。
ねずみバスターズ、インドとブラジルに数万人規模でリリースしたんですが、報告されたクラッシュが30件程度なので驚愕の安定性...
— Daigo (@daigo) September 11, 2020
特徴
- クロスプラットフォームで、非常に安定
- Windows
- macOS (Metalを使用)
- Linux
- FreeBSD
- Android
- iOS
- web
- WebAssembly
- Nintendo Switch(
- 非常にシンプルなAPI (参照: ゲームエンジンはアートである - 8 年以上自作ゲームエンジンをメンテし続けている話)
- 豊富なサンプル(ここですぐに触れます)
- 高いパフォーマンス
- 今もアクティブに開発中で、バグはすぐに修正され、新機能も追加されている
はじめる
(ここではGoのインストールおよび、Goの基礎知識に関しては割愛します。)
Windowsおよび、macOSで Ebiten を使い始めるのは非常に簡単です!
まずは、go mod init <モジュール名>
で適当なGo Moduleを作り、以下のコードを書いてみましょう。
(https://ebiten.org/tour/hello_world.html の転載)
package main
import (
"log"
"github.com/hajimehoshi/ebiten"
"github.com/hajimehoshi/ebiten/ebitenutil"
)
type Game struct{}
func (g *Game) Update(screen *ebiten.Image) error {
return nil
}
func (g *Game) Draw(screen *ebiten.Image) {
ebitenutil.DebugPrint(screen, "Hello, World!")
}
func (g *Game) Layout(outsideWidth, outsideHeight int) (screenWidth, screenHeight int) {
return 320, 240
}
func main() {
ebiten.SetWindowSize(640, 480)
ebiten.SetWindowTitle("Hello, World!")
if err := ebiten.RunGame(&Game{}); err != nil {
log.Fatal(err)
}
}
できたら、go run main.go
を実行します。初回だけは各種ビルドに時間がかかるので待ちましょう。
画像のような、いい感じに味のあるHello Worldが表示されれば成功です!
Windows, macOS以外のプラットフォームでのビルドについては、ドキュメント https://ebiten.org/documents/ を参照してください。
できること
ざっくりと Ebiten の機能を列挙してみます。詳しい解説は Ebitenの個人的まとめ に譲りますので、実際に扱う際はそちらを参照してください。
- 画像の描画
- 変形:移動、回転、拡大縮小、切り抜き、スキュー
- 色の変化:色相、スケールなど
- 各種アルファブレンディング
- 音声の再生 (mp3, wav, ogg)
- テキスト描画
- フラグメントシェーダーと、その記述のための独自言語 Kage
- 入力の取得
- キーボード、マウス、ゲームパッド、タッチ
- 入力まわりを補助してくれるパッケージもある。
入力まわりを除けば全ての機能が、Webやモバイルを含む各種プラットフォームで同じように利用できます。(対応状況)
できないこと
Ebiten は意図的にシンプルさを保っているため、フレームワーク的な部分は備えていないのでご留意ください。
- ゲームオブジェクトの管理機能
- カメラ機能
- 当たり判定
- HTML Canvas レベルの高度なベクター描画
- などなど...
より深く
最後に各種リソースへのリンクをご紹介するので、学習に役立ててください!
サンプル
Webサイト には、たくさんの今すぐ触れるサンプルが掲載されています。
ソースは、リポジトリの examples/
ディレクトリ以下にあります。Webよりもさらに数が多いです。(GitHubのリンク)
# go run ソースへのパス
go run ./examples/rotate/main.go
ドキュメント
- 公式サイト
- リファレンス(godoc)
-
Ebitenの個人的まとめ
- Qiitaの詳細な解説記事。
- Go のゲームライブラリ Ebiten における API 設計思想
コミュニティ
-
Gophers Slack の #ebiten チャンネル
- 参加は この招待リンク から。
- 英語メインですが、比較的アクティブで、最新情報の告知もここでされることが多いです。
- すぐ反応してもらえるので、非常にサポートが手厚い(重要)
-
vim-jp slack の #lang-go #gamedev チャンネル
- Vim のコミュニティですが、なぜか日本で一番盛り上がっている技術コミュニティでもあります。Ebiten の話題もすぐ反応してもらえるので、こちらの方が便利かも。
- 作者ツイッター
-
Reddit の r/golang
- たまに Ebiten に関連する話題が投下されることがある。
-
Reddit の r/ebiten
- まだ作りたてだけど、これから盛り上がってほしい。