Godot Engine上で振り仮名(ルビ)を実現する

Godotでもルビを振りたい!

皆さんはゲームを作るとき、何のエンジンを使いますか? ……なになに、「既製エンジンを使うとは限らないじゃないか」ですって? いやいや、今時、フルスクラッチで自作する硬派な人は希少でしょう1。エンジンっぽいものを作るにしても、既製のツールの上にオリジナルのものを実装するケースが多いのではないかと思います。車輪の再開発はできるだけ避けたいでしょうから。
既製エンジンで言えば、UnityやUnreal EngineのようなAll-in-Oneなエンジンを使う方も多いでしょうし、あるいはGameMakerやRen’PyやPhaser (≒Pixi.js)のように強み重視なエンジンを使う方もいらっしゃると思います。どれもそれぞれ特徴があって面白いですよね。
有名なゲームエンジン間の比較や各エンジンの強み・弱みを解説しているgamesindustry.bizの記事を読んでみると、いろいろあるんだなあと改めて実感します。

ところで最近、私はGodot Engine2というFLOSSのゲームエンジンを触り始めています。シングルバイナリ(60MBほど)で動作し軽量、マルチプラットフォーム(Linuxでも動きます)に対応、おまけにFLOSS(MITライセンス)なのでソースコードも読み放題! という個人的な理想が詰まったエンジンなのです。控えめに言って神、というのはこのことでしょう。
そして、私は事あるごとにノベルゲームのような何かを作る習性3があるため、今回もGodot Engine上でノベルゲームっぽいものを作ることにしました。

海外ではそれなりに人気もあるエンジンということもあり、大体の機能は揃っています。テキスト表示も詰まることなくオーケー。各種画像表示4や音源再生もオーケー。基本的なノベルゲームっぽいものは難なく完成。
しかし、ちょろちょろとスクリプトを入れ込んでいるうちに、あることに気が付きます。そう、振り仮名、所謂ルビを振る機能がないのです。Godotは海外産である上に日本でもマイナーな存在ということもあって、ルビのようなレア機能は当然実装されていないのでした。

調べてみると、Unityでもデフォルトでルビはサポートされていないようですが、流石有名なUnity、いくつか実装例が存在しているようです5。しかし、Godotでの実装例は見当たらず……。
Godotに心を奪われてしまった一ファンとして、これは見過ごせません。というかファン云々以前に、とにかくGodot上でルビを振りたいのです。

[Read More]