Unityでえもふりを試してみる

はいどーもこんにちは、2Dゲームで世界の覇者となりたいニートです。
本日は「えもふり」というものをいじくってみたいと思いますよ。

えもふりってなんやねん

「えもふり」とはE-mote Free Movie Makerの略で、2D画像のアニメーションを簡単に作れちゃう的な無料のツールです。
あんまり知らないので間違っている可能性大ですが、live2Dみたいな感じじゃないでしょーか。
ちなみに有償版もあるみたいですよ。
ただめっちゃ高いので、個人なら無料版でいい気がします(制限とかよく見てませんが)。

Unityに導入してみる

ちゅーわけで「えもふり」で遊んでみましょう。
まずは以下のURLから「えもふり用UnitySDK」をダウンロードしてください。
http://emote.mtwo.co.jp/emofuri/
履歴みた感じ、昨日更新されたみたいですね。
僕もこの記事を書きつつ、再DLしました。

最終的にこんな感じの画面を作ります。

それではDL完了後、Unityの新規プロジェクトを作成しましょう。
その後メニューから「Assets→ImportPackage→Custom Package」を選択し、「emote_sdk_type2.unitypackage」を全てインポートしてください。
ここまででえもふりを試す準備が完了です。
ついでに同梱のマニュアルをサッと眺めておいてください。

新規シーンにえもふりのロゴを表示させる

先ほどインポートしたファイルの中にサンプルシーンが入っているのですが、とりあえずここでは「空のシーンにえもふりのオブジェクトを表示させる」ことを目指して行きたいと思います(最終的にはキャラクターを表示し、ランダムでモーションさせるプログラムを作ります)。

ちゅーわけで新規シーンを作成(EmoteLogoScene)したあと、まずはえもふりのロゴを表示させてみましょう。

注1*ロゴを表示させないと、えもふりのオブジェクトがモノクロになるようです。

注2*僕は普段2Dモードで開発しているので、ここでも2Dモード前提です。

1.ヒエラルキーを右クリックして、CreateEmptyから空オブジェクトを作成
2.名前をEmoteLogoに変えたあと、EmotePlayerスクリプトをアタッチ
3.EmotePlayerスクリプトのTransform欄にあるAliginmentをAlign to originに変更
4.EmoteLogoスクリプトをアタッチ
5.EmoteLogoスクリプトのNextSceneを空にする
6.ResolutionをD5にする
7.Transform(EmoPlayer.csではなくGameObjectの方)のScaleをX4Y4にする

EmotePlayerスクリプトは、えもふりのオブジェクトを操作するときに使う重要なスクリプトです。
EmoteLogoスクリプトは、えもふりのロゴを表示するために使うスクリプトです。
NextSceneにはロゴ表示後に飛ばしたいシーンを書いておくようですが、今回は特にどこにも飛ばさないので空白にします。
Resolutionはターゲットプラットフォームの解像度に合わせて変更するようなのですが、なぜかD4設定だとエラーが発生するのでD5に変更しました。
そのうち原因を探るかも探らないかも(D5で困ることが特になさそうならD5でいいかなってw)。
TransformのScaleを変更したのは、こちらの環境だとなんかやたら小さくなっていたからです(これは多分2Dモードが関係しているような気も)。

あとは普通に実行してみてください。
画面にえもふりのロゴが表示され、消えればOKです。
実機(Android)でも試したところ、ちゃんと表示されていましたよ。

キャラクターを表示させる

次は同梱されているキャラクターのサンプルを表示させてみましょう。

1.ヒエラルキーに空のオブジェクトを作成し、名前を「MainCharacter」に変更
2.EmotePlayersスクリプトをアタッチ
3.PSBFileをvr_girlに変更
4.AlignMentをAlign to Centerに変更

これで画面の中央に女の子が表示されたと思います。
ゲームを実行してみて、目をぱちぱちさせていればOKです。
これもAndroidでちゃんと動くことが確認できましたよ。

モーションを変更させる

それではキャラクターのモーションを変更させてみましょう。
えもふりは「主モーション」と「一時的に再生させるモーション」があるようで、それがそれぞれMainTimelineとDiffTimelineで設定されています。
この辺はぶっちゃけまだよくわかっていないので、とりあえず今回はMainTimelineだけ使っていきたいと思います。

モーション一覧はEmoPlayerスクリプトのMainTimelineの項目から選ぶことができます。
ゲームを実行させてから、インスペクタ上の値を変更させてみてください。
笑ったり怒ったりできたらOKです。

スクリプトからモーションを操作する

先ほどインスペクタ上からモーションを変更させましたが、インスペクタ上から変更できても実際のゲームでは役に立たんというわけで、今度はスクリプトから動的にモーションを変更させてみましょう。
EmoteTestスクリプトを作成したあと、以下のような内容にしてください。

注*スクリプトをこのあともちょこちょこ書きますが、コードの意味がわからなくても問題ないように書いているつもりです。「プログラミングなんて知らん!」という方はとりあえずコピペしてもらえばOKです。

その後の手順は以下の通りです。

1.ヒエラルキーに空のオブジェクトを作成し、CharacterControllerに変える
2.先ほど作成したスクリプトをアタッチする
3.CharacterControllerのインスペクタのEmotePlayerをMainCharacterに変更
4.ヒエラルキーにuGUIのButtonを作成
5.OnClickイベントにCharacterControllerのSelectSadMotionをセット

あとはゲームを実行して、ボタンを押してください。
悲しい表情のモーションが表示されればOKです。

スクリプトの解説

それではスクリプトの中身を説明していきますが、プログラミングに興味のない人は飛ばしてもらっても大丈夫です。
EmotePlayer型ですが、これがえもふりのオブジェクトの本体をまとめているクラスです。
主にこのクラスのインスタンスを操作して、えもふりのオブジェクトに副作用を与えていきます。

さてSelectSadMotionメソッドを見てください。
EmotePlayerクラスのインスタンスである_emotePlayerのmainTimelineLabelプロパティに”sample_哀01″を代入しています。
このmainTimelineLabelプロパティに代入する値は、インスペクタのMainTimelineで表示される一覧のものである必要があるようです。
その他の値を代入しても特に何も起こりませんでした。

何らかの理由で「値が有効であるかどうかを確認したい」という場合、以下のメソッドが使えるでしょう。

このメソッドは、そのラベルが存在するかどうかをbool値で返します。
今回なら以下のように書けますね。

また、有効な値の一覧を取得したい場合もあるかなと思います。
そんなときはmainTimelineLabelsプロパティを使いましょう。
このプロパティはstring型の配列(有効なラベルの一覧)を返します。、
なおゲッターのみで、セッターは用意されていません(当然と言えば当然ですが)。

あと本題とはあんまり関係ないのですが、プロパティがlowerCamelCaseで統一されているのが気になりますw
C#だとUpperCamelCaseが普通じゃないのかなあ……。

ランダムにモーションをさせる

ここまでの知識で、えもふりのオブジェクトに対してランダムにモーションを選ばせることができるようになりました。
というわけでさっそくコードをドン。
先ほど作ったEmoteTest.csをまるまる上書きしてください。

コピーが完了したあとの手順は以下の通りです。

1.uGUIでボタンを作成
2.ボタンのOnClickイベントにSelectMotionAtRandomをセット

簡単ですね。

あとはゲームを実行したあとにボタンを押して、ちゃんとランダムにモーションが選ばれているかどうかを確認してください。
ついでにログで「モーション名」+「有効化どうか(TrueかFlase)」を出力するようにしています。
実機(Android)で動くことも確認できましたよ。

おわりに

「えもふり」を知ったのはつい昨日のことですが、面白くて色々と試してしまいました。
live2D等のツールも似たような感じなんですかね?
思ったよりも自然なアニメーションをしていて感動したので、絵が描ける方なら利用を視野に入れてみてもいいんじゃないでしょーか(僕は絵が全く描けないのでダメですがw)。

ちゅーわけでこの「えもふり」を使って何かしてみたいんですが、ADVシステムの構築くらいしか思いつかないんですよねえ。
ADVならティラノスクリプト版の方が汎用性が高そうな気がしています(ティラノスクリプトがそもそもADV用のツールですしね……)。

そのうち気が向いたらリップシンクの機能とか、サンプルに同梱されている他の機能の紹介もしてみたいと思いますよ。
ほなそんな感じでまた。

フォローする