🥳

Live2D Cubism SDKの非公式Golang版を作った

2024/04/04に公開

リポジトリ: aethiopicuschan/cubism-go

2024/03/29に行われたEbitengine ぷちConf #2にてLTをさせていただき、その際に発表したものになります。

前回の記事、EbitengineでLive2Dを描画してみたにおいてはCubismNativeFrameworkとCubismCoreを更にラップしたオレオレ動的ライブラリを作成して利用していましたが、今回はCubismNativeFrameworkに相当する部分をGolangで実装した形になります。[1]

特徴

cubism-goの特徴は、CubismCoreを叩く箇所にebitengine/puregoを利用していることと、それ自体がEbitengineに依存していないことです。

もちろん、Ebitengineを使っているプロジェクトに簡単に導入できるようなレンダラのpackageを含めてはいますが、ユーザが自身で実装したレンダラを用いることが可能になっています。

また、モーションに紐付く音声再生の実装も用意していますが、こちらもユーザが自身で実装したものを利用することが可能です。

package sound

/*
音声のインターフェース
音声再生を自分で実装したい場合はこのインターフェースに従えば良い
より具体的には、このインターフェースの実装を返す関数をCubism.LoadSoundに設定する
*/
type Sound interface {
	// 音声を再生する
	Play() error
	// 音声を停止する
	Close()
}

シンプルな構成

諸々の処理をなるべくinternalなpackageに分割したことで、ユーザから見たときに非常にシンプルでわかりやすい形にすることができました。referenceexample/main.goを見ていただければそれがわかると思います。

TODO

モーションブレンドなどの高度な機能が未実装です。また、デフォルトのEbitengine向けレンダラもパフォーマンスの面で改良の余地がありそうです。ちょっとした燃え尽き症候群になっているので、元気が出たら取り組みたいところです。
大体の課題はリポジトリにissueを立てているので、PRなど大歓迎です。

おまけ

開発中にバグで魔女ラニみたいになってしまったHaruさん。

以上です。もしGolangでLive2Dを描画したい!という方がいらっしゃったら是非採用をご検討ください。

脚注
  1. CubismCoreはソース非公開かつ代替不可能 ↩︎

Discussion