sunarit’s blog

Unity開発の備忘録

uSequencer vs Cinema Director

Unityでカットシーン(いわゆるムービー)を作りたいと思うことがあります。
タイミングを調整しながらイベント実行のスクリプトをコツコツ書くのもアリですが、エディタとランタイムを行き来する必要があり、試行錯誤が大変で時間がかかってしまいます。
その辺を楽にしてくれるのがカットシーンエディター系のアセットです。
有名どころではuSequencerが挙げられますが、それ以外にもCinema DirectorFluxなどいくつかあります。
いずれのカットシーンエディターにも共通して、タイムラインが利用できる点が特徴です。
タイムラインを使用すれば実行するイベントのタイミングを視覚化できるので、スクリプトで書くよりも断然楽になります。
というわけで、uSequencerとCinema Directorをどちらも1週間ほど実際に使用してみました。
なお、uSequencerには「Source uSequencer」と「uSequencer」の2つのバージョンがあります。「Source uSequencer」にはソースコードが付属しており、「uSequencer」はコア部分がコンパイルされたDLLとなっています。今回の比較で使用したのはDLL版の「uSequencer」です。
ちなみに、価格ですが、
・uSequencer - 45USD (Source版は 150USD)
・Cinema Director - 60USD
となっています。どちらも、いつか使うだろうと思い、セールの時に購入していました。

なお、比較した各バージョンは以下のとおりです。
・uSequencer 1.3.9.1
・Cinema Director 1.4.0.6

【使いやすさ】
uSequencerの方が直感的にすぐに使えました。
Cinema Directorは、動かしたいオブジェクトに合わせて、Actor Group、Character Groupなど適切なグループをあらかじめ追加してから設定する必要があります。いわゆるCinema Directorならではの「お約束」です。実際に使う前にドキュメントをよく読んでおかないと、何をしていいのか戸惑います。
uSequencerはそういった「お約束」は極力排しており、とりあえず動かしたいオブジェクトをエディタウィンドウに放り込んだらタイムラインで右クリックするだけでイベントの設定が可能です。
また、uSequencerにはショートカットキーが用意されていますが、Cinema Directorにはショートカットキーはほとんどありません。操作性という部分ではCinema Directorは頻繁にマウスを動かさなくてはならず、不便に感じました。

【機能】
どちらも簡単なカットシーンを作る上での基本的な機能に関しては揃っています。
uSequencerにはシーン上でパスを作成する機能があったり、複数の音声ファイルを1トラック上で同時に再生できる、さらにはMecanimステートメントをプルダウンリストから選択できる等といった基本的な機能が洗練されています。
Cinema Directorを触っていると「あ、これできないのか」ということがたまにありました。

【安定性】
今回、この「安定性」という部分が非常に重要だと感じました。正直に言って、uSequencerはこの安定性という部分で非常に疑問が残ります。と言うのも、頻繁にエディタウィンドウが使用できなくなったためです。使用できなくなる度に、再度、エディタウィンドウを立ち上げなくてはならず、フラストレーションがたまります。uSequencerの開発者にはこのバグの再現手法も含めて連絡してあり、「次のバージョンで直すよ」と返信を貰っていますが、あまり頻繁にアップデートをしていないこともあり、どこまで信頼していいのか分かりません。
Cinema Directorにもクラッシュする等のクリティカルなバグはありますが、連絡すれば1、2週間程度で直してくれますし、場合によっては修正したバージョンをアセットストアでのバージョンアップ前に貰えるなど、サポートという部分では信頼できます。最悪、ソースコードがありますので自分で直すことも可能です。Unity側の仕様変更により、いくつかの機能が使用できなくなっているのに気づきましたが、簡単なものは自分で修正しました。これもソースコードがあるから可能なのです。
uSequencerもSource版の方を購入すればいい話なのですが、アップデート頻度の低さを考えると、150USDという高めの価格を払う気になれません。

【結論】
Cinema Directorに軍配があがると思います。ただ、結構、バグが存在していることもあり、諸手をあげてオススメできないのが本音です。また、どちらのアセットにも共通して言えるのが他アセットとの連携が弱いというところです。開発方針として、音声ファイルのコントロールはMaster Audioで、Tween系はLeanTweenで、といった決め事がある場合、オリジナルのカスタムイベントを作成しなくてはなりません。幸いにも簡単に作成できるようにはなっていますが、逆に言えば、ノースクリプトではできることが限られてきます。
カメラコントロールや基本的なキャラクターアニメーションはCinema Directorで、IKやシーンの分岐制御の作り込みはスクリプトで、というのが、現状、最も良い使い方かなと思います。
なんにしろ、「これ1本で何でも」というような多大な期待は禁物だと感じました。

今回はDLL版のuSequencerとCinema Directorを比較しましたが、DLL版ではなくSource版のuSequencerで比較した場合、また違った結果になるかもしれません。その辺はご理解ください。

【Unity5対応】
uSequencer
Source uSequencer
Cinema Director

【オススメ!】SimpleSQL

UnityでSQLが使えたらなって思っていたところ、2015年6月のLevel11セールでSimpleSQLが半額(40USD -> 20USD)だったので購入しました。
結論から言うと、UnityでSQL(正確にはSQLite)が使いたいなら買いです!

あらかじめ抽出カラム用のクラスを作成したりするなど、ちょっとクセがありますが、一度覚えてしまえば簡単にUnity上でSQLiteが利用可能になります。
懸念点だったiOSでのビルドですが、特になんの問題もなく動作しました。
下の画像は試しにiOSの動作テスト用に作成してみたプロトタイプを実際に実機で動作させ、キャプチャーしたものです。
データはFireFoxプラグインSQLite Managerで作成したものをUnity側にインポートしました。

f:id:sunarit:20150617022520g:plain

データをどこにどうやってストアするかは色々な手法がありますが、データベースが利用できるのはやっぱり楽ですね。


Asset Store
[Unity5対応]

【セール!】BeholdR

アセットストアのセールでBeholdRが50%オフ(20USD -> 10USD)です!!

このBeholdR、最終的な画面の作り込み時などに力を発揮するアセットなのです。
百聞は一見にしかずなので、スクリーンショットを。

下の画像はBeholdR無しでのスクリーンショットです。
f:id:sunarit:20150605011941p:plain
左側がSceneビューで右側がGameビューです。
ここでは画作りにカラーグレーディングを使用していますが、Gameビューには適用されているポストエフェクトがSceneビューには適用されていないことが分かります。
これはUnityの仕様なのでどうしようもありません。

そこでBeholdRの登場です。
下の画面はBeholdR有りのスクリーンショットです。
f:id:sunarit:20150605012844p:plain
左側のSceneビューがGameピューとほぼ同じ色合いの画像になっているのが分かると思います。

つまり、Gameビューを確認することなくSceneビューのみでポストエフェクトの効果を確認することができるのです。ゲーム自体の機能を拡張するようなものではありませんが、最終的な画作りをSceneビューのみで確認できるのは非常に便利です。

日本時間では6/5 22:00頃にセールが終了するので、興味ある方はお早めに!!

[Unity5対応]
Asset Store

【オススメ!】Behavior Designer

敵キャラクターが出現するようなゲームを作る際、重要になるのが敵の挙動です。
ただ単に歩くだけ、走るだけならスクリプトで書けないこともないですが、プレイヤーとの距離に応じた行動や攻撃等を行わせる場合、スクリプトを書くよりもAIツールを入れてしまったほうが圧倒的に楽です。

UnityのAIツールでオススメなのが、Behavior Designerです。
以前はICode(旧AI for Mecanim)を使用していましたが、再利用のしづらさ、パフォーマンス、拡張性等の理由からユーザー評価の高いBehavior Designerに乗り換えました。
ICodeはMecanimに近いUIだったので直感的に使用することができましたが、Behavior DesignerはBehavior Treeと呼ばれる手法でAI構築を行うため、最初とまどいました。ただ、半日も触っていれば理解できるほどシンプルでした。

下の画像は、プレイヤーとの距離に応じて見る、走る、歩く、攻撃する、避けるといった単純なAIをBehavior Designerで作成したものです。
f:id:sunarit:20150522150035p:plain
同様の挙動をスクリプトで書いていた時はトライ&エラーで丸々2日程度かかっていましたが、Behavior Designerでは2時間もたたずに作成できてしまいました。
Behavior Designerおそるべし!です。
なお、NavMesh等のパスファインディングを使うには別売りの「Behavior Designer - Movement Pack」が必要になるので要注意です。

[Unity5対応]
Asset Store

距離によるダメージコントロール

距離が10以上離れていたらならダメージは50%オフ。
Projectile側よりもEnemy側で計算した方が軽い。
Easy Weapons 3.0.2

EnemyHealth.cs

public void ChangeHealth (float amount) {

	playerPos = player.transform.position;
	Vector3 myPosition = gameObject.transform.position;
	distance = Vector3.Distance (playerPos, myPosition);
	if(distance > 10) {
		myDamage = amount * 0.5f;
	}
	amount = myDamage;

	currentHealth += amount;
}

【オススメ!】Advanced FPS Counter

モバイルデバイス対応のゲームを作る際に一番ネックになるのがパフォーマンスです。
安定していないフレームレートはゲームプレイにダイレクトに影響しますしね。
そこでおすすめなのが、Advanced FPS Counter。
下の画像はiPhone6で動作させているときのキャプチャです。
左上にフレームレートが表示されているのが分かると思います。
リアルタイムで表示してくれるのでテストプレイ時などで重宝します。
f:id:sunarit:20150522134629p:plain

[Unity5対応]
Asset Store

Dialogue Systemで会話終了時にメソッド実行

敵を倒して取得した経験値を消費して、プレイヤーパラメーターを上げるっていうのをDialogue System&EasySave2で実装。
Dialogue System 1.5.0

[ロジック]
1. NPCに話しかける
2. 経験値が足りているかチェック
3. (経験値が足りていれば)どのパラメーターを上げるかプレイヤーに尋ねる
4. パラメーターを上げる
5. オートセーブ

1、2、3はDialogue System上のLuaスクリプトでコントロール可能。
自分で実装する部分は4と5。

あらかじめplayerManager.csというようなスクリプトを作成しPlayerManagerゲームオブジェクトにアタッチ&以下のようなメソッドを追加。

public void myPlayerUpgrade () {
gunPower = DialogueLua.GetActorField("Player", "gunPower").AsInt;
ES2.Save (gunPower, "gunPower");
}

で、NPCにも適当なスクリプトをアタッチして、

void OnConversationEnd (Transform actor) {
GameObject go = GameObject.Find ("PlayerManager");
go.GetComponent<playerManager>().myPlayerUpgrade();
}

を追加すれば完了。
void Start()でES2.LoadとDialogueLua.SetActorFieldを忘れないように。

Dialogue Systemには同等のコンポーネントも用意されているが、NPCの挙動が分散されてしまうので自分で書いてしまった方がシンプル。