Unityで文字の3Dモデルを作る(VTextアセット編)


※以下で説明する通り、現状Dynamic Batchingを切らないとエラーになるようです。アプリ全体のパフォーマンスに影響があるため利用が難しそうですが、それはそれで情報としてあった方が良いと思うので公開します。


文字を3Dモデルとして扱う事で、巨大な文字を積み上げたり転がしたりしたいと思い、試してみました。

VTextについて

Asset Storeで公開されている有料アセットです。
VText
https://www.assetstore.unity3d.com/jp/#!/content/24768

※クリックでYouTubeの説明動画に飛びます

Unity 4.6.0 以降のバージョンが必要
VText is a Unity Package which generates dynamic 2d and 3D text at runtime, using an intuitive user interface. VText supports Unity Pro 4 and Unity 5(Personal Edition & Enterprise Solutions)

価格は $60 です(2016年9月8日時点)

確認環境

  • Unity v5.4.0f3
  • Xcode v7.3.1
  • MacBook Pro (OS X 10.11.5)
  • iPhone 6s

デモを動かす

(1)初期設定〜Unityエディタ上で動かすまで

よくあるインポート→デモシーンを開いて実行、では動かないので注意して下さい。
この手順はアセットに含まれるドキュメント(Web上にもあります)に沿っています。

  1. VTextアセットをインポート(全てチェックでOK)
  2. UnityのWindowメニュー -> Virtence -> VText Setup を実行。VTextSetupというウィンドウが開く。
  3. Checkをクリック
  4. Create StreamingAssets Folderをクリック。このボタンは、既にStreamingAssetsディレクトリがある場合出現しない。
  5. Create StreamingAssets/Fonts Folderをクリック。同上。
  6. Install all provided fontsをクリック。これによりStreamingAssets/Fontsに幾つかのフォントファイル(.otf)が置かれる。デモシーンで使われているのでここで入れたが、自分で作る際には必要なフォントのみを置く。なおこのフォントファイルはビルドにそのまま入るため、サイズや著作権に注意。
  7. Unityを再起動してプロジェクトを開き直す
  8. Assets/Virtence/VText/_DemoScene/StartScene を開いて実行する

Unityエディタ上はこれで動くのですが、確認した環境では以下の問題が出ました。

Dynamic Batchingのエラーが大量に出力される

新規プロジェクトを作り、上記の手順でデモをそのまま動かすと "Dynamic batching: index buffer source is NULL (first IB byte 0 count 0 first vertex 0 offset 226)" といったエラーがConsoleに大量に出力されます。クラッシュはしませんが気持ち悪い状態です。こちらについてはAsset提供元から報告があり、バグトラッカーにも登録されています。
VText提供元の発言
Unityのバグトラッカー

(2)iOSで動作させるための対応

上記の通り、Unityエディタ上だとエラーログは出るものの動いていました。が、iOSプロジェクトをビルドしてXCodeから実機で実行しようとすると、起動時にUnityGfxDeviceWorkerでbad accessが出てクラッシュしてしまいます。

提供元が書いているくらいなので使い方の問題ではなく(環境依存はあるかもしれませんが)、Dymanic Batching周りだろうということで外してみたところ、クラッシュせず無事動作しました。
具体的には、iOSプラットフォームにswitchした状態でUnityの Build Settings -> Player Settings -> Other Settings -> Dynamic Batching のチェックボックスを外します。

しかしこの方法はアプリ全体のパフォーマンスに影響があるため、他の回避手段が見つかるか、上記のIssueが修正されないと私の用途では利用が難しく、いったんこのアセットの利用は断念しました(IssueにVoteしました)。

もう1つ同じ用途で使えそうな別のアセットがあるため、次はそちらを試す予定です。
→(2016/09/13追記)試しました。非常に良いです。
Unityで文字の3Dモデルを作る(FlyingText3Dアセット編) - Qiita

デモの範囲での覚書

  • 日本語(日本語フォント+日本語文字列指定)は、問題なく表示されました
  • ドキュメントにもありますが、文字モデル生成時の負荷が結構高い印象です。クォリティ設定を落とす(ポリ数を小さくする)事で軽くはなりますが、用途次第では厳しいかもしれません
  • 装飾はかなりバリエーションがあり、クォリティを上げるとかなり綺麗なので、動的生成ではない用途であれば有用そうだと感じました