sunarit’s blog

Unity開発の備忘録

【セール!】Advanced Shooter Kit

本日、「Advanced Shooter Kit (以下、ASK)」がセール中です。
どんなアセットかというと、いわゆるFPS系のフレームワークです。このアセットをインポートすれば、あっと言う間にFPSの基礎部分が作れてしまうというわけです。
この手のFSPフレームワークでもっとも有名なのは「UFPS」だと思います。他にも「Easy Weapons」や「Pro Weapons Kit」などがあります。

そこで「UFPS」、「Easy Weapons」、「ASK」の3本を、モバイル化を念頭にカスタマイズすることを前提に比較したいと思います。

【多機能】
Easy Weapons < ASK < UFPS

スローモーションやインタラクションなどの機能があらかじめ搭載されている「UFPS」が最も多機能と言えます。逆に「Easy Weapons」は「撃つ」、「倒す」といった基本的なFPSの部分は機能として実装されていますが、アイテムやインタラクションなどの概念は無く、必要であれば自分で実装する必要があります。「ASK」はその中間です。インタラクションの概念はありませんが、アイテムの概念などは実装されています。
「多機能」という括りで考えれば、「UFPS」が一番です。
ちなみにここで言っているインタラクションの機能とは、「スイッチを押すとドアが開く」みたいな機能のことです。

【カスタマイズの難易度】
UFPS < ASK < Easy Weapons

「Easy Weapons」は機能がシンプルなのでスクリプトの可読性も高く、カスタマイズが容易です。逆に、「UFPS」は多機能ゆえ、若干スクリプトを読み解くのに時間がかかります。ただ、この辺は活発なフォーラムと詳細なドキュメントが用意されているので、目的のクラスやメソッドに辿り着くのはそんなに難しくありません。
「ASK」は結構癖のあるスクリプトなので、他の2つに比べて若干難易度が高いと思います。また、バージョンアップによってスクリプトをガラッと変更することがあるので要注意です。余談ですが、1.2 から 1.3 へのバージョンアップで入力系を大幅に変更してきました。1.2 でモバイル対応させていたスクリプトは全部書き直しとなりました。

【軽量化の難易度】
UFPS < Advanced Shooter Kit < Easy Weapons

モバイルで動作させるにはやはり軽量化が必須になります。特にエフェクト系でパーティクルやRigidbodyが使用されていることが多いです。いずれもCPUコストが大きいので、この辺を簡単に調整できるかが重要になります。
基本的なFPSの機能である「撃つ」、「倒す」を残し、どこまで軽量化が可能かをテストしてみました。
「UFPS」はそもそもPCで動作させることを前提に開発されている(と思われる)ので、機能が豊富で画面が派手な分、軽量化するには数多くの手間が必要でした。Full Body Awarenessの削除や必要のないUpdate()の最適化などを行い、できる限りシンプルにしてiPhone6で動作させてみましたが、Xcode上でのCPU使用率は40%を切るくらいが限界でした。時間をかけて最適化をしていけば、もっとCPU使用率を下げることは可能だとは思いますが。
これに対して、「Easy Weapons」はシンプルゆえに、本体のカスタマイズをせずに入力系だけモバイル対応させiPhone6上で動作させても、CPU使用率は40%を切るレベルです。必要のないUpdate()削除や細かい部分での調整を行えば、CPU使用率30%を切るところまで簡単に行えます。
「ASK」も「Easy Weapons」同様、シンプルなフレームワークですので最適化は容易です。「Easy Weapons」並みに、アイドル時20%台、オブジェクト破壊時でも常時30%台をキープできるので、十分軽量化可能だと思います。

【総評】
「UFPS」、「Easy Weapons」、「ASK」と3本の比較をした結果として、一番のオススメは「ASK」です。
まず「UFPS」ですが、モバイルで動作させることをあまり重要視していないアセットであるため、PCで動作させるハイエンドなFPSを作るには最適ですが、モバイルで動作させるには数多くの機能削除が必要となり、売りであるFull Body Awarenessやエフェクト等を利用することはかなり厳しいです。そうすると、「UFPS」を利用する意味が無くなってしまいます。今回のテスト時にCPUコストにほとんど影響しなかった「UFPS」機能のひとつ、インタラクションですが、こちらもオリジナルでの実装がそんなに難しいものでもないので、このためだけに「UFPS」を使用するというのも、ちょっと考えものです。
「Easy Weapons」はモバイル最適化が非常にしやすいフレームワークです。シンプルさとコードの可読性の高さゆえに、必要だと思う機能を自分でコツコツ追加していくことも簡単にできます。この辺は開発者も分かっているらしく、簡単にカスタマイズできるようにデフォルトでは使用していないカスタマイズ専用のクラスやメソッドをあらかじめスクリプト内に用意してくれていたりします。
ただ、ひとつ大きな問題点があります。それは、アップデートが2015/4/21で止まってしまっている点です。今回のテストはUnity5.1.2で行いました。インポート時にいくつかのWarningが出るだけで使用自体には特に問題はないのですが、すでに半年近くアップデートが止まっているのは心配になります。Forumでは開発者が今でもいるようなので大丈夫だとは思いますが、もう少し頻繁にアップデートしてくれないと、諸手を上げてオススメできないです。
そんなちょっと心配な「Easy Weapons」とハイエンドすぎる「UFPS」の間にいるのが「ASK」です。
「ASK」のスクリプトは癖があるので慣れるまで読み解くの若干時間がかかりましたし、バージョンアップで泣かされたりもしましたが、今回取り上げた3本の中では一番、モバイル化しやすいと感じました。また、「ASK」の売りとして Mobile Optimized とも記載されています。この謳い文句が一体どこまで本当なのかは分かりませんが、スクリプトを読む限り、常時コールしているメソッドはかなり抑えられているように感じました。

そんな「ASK」が本日2015/10/19のセール(55%OFFの15.73USD)になっています。
モバイル動作前提でFPSフレームワークをお探しならオススメです!

[Unity5 対応]
Asset Store

Editor Console Pro

Sensible Saleで購入した「Editor Console Pro」を使ってみました。
当初、Debug.Log();の代わりに、Editor Console Proが用意したDebug.Log();の代替になるクラスを使用するのかと勝手に思っていました。そのため、プロジェクト途中で入れるのはちょっと躊躇していたのですが、実際はそんなことありませんでした。
普通にDebug.Log();を使用します。
で、この「Editor Console Pro」で何ができるかというと、一言で言えばUnityデフォルトのコンソールよりも詳しい情報が表示可能になり、さらにはカスタマイズまで可能にするプラグインです。
下のスクリーンショットを見ていただくと一目瞭然ですが、Debug.Log("buttonTwitterTouched START");はコルーチン内に書かれており、ここに辿り着くまでのフローをスタック状態で表示してくれているのが分かると思います。
f:id:sunarit:20150922041652p:plain

この他にも任意で抽出したいフィルターを作ることができたりと、Unityデフォルトのコンソールではできないことが可能になります。

最初の印象は「まあ、無くても困らないかな」なんて思っていましたが、しばらく使う内にUnityデフォルトのコンソールには戻れなくなりました。ロジックの矛盾や無駄を突き止めたり、プログラム内で何が行われているのかを明らかにするプラグインなので、これを入れたからといって画面が派手になったりゲームに何らかの機能が追加されたりするわけではありませんが、コードを書いたり、Asset Storeで購入したアセットをカスタマイズする際にとても役立ちます。

9/22の22:00(日本時間)前くらいにはセールが終了します。
セール中は半額の15USDなので、興味のある方はお早めに!

[Unity 5対応]
Asset Store

Worn Edge

2、3日前のセールで購入した「Worn Edge」を使ってみました。
このアセット、何ができるかというと、オブジェクトにアタッチされているテクスチャーを自動的に解析し、エッジ部分を汚した派生テクスチャーを生成してくれるツールです。

例えば、既に持っている3Dモデルを錆びさせたり汚したりできるので、経年劣化を表現したい場合などで力を発揮します。
この動画を見れば一目瞭然です。
とはいっても、元のテクスチャーをフォトショップなどに読み込んで加工しても同様のことが可能なので、このツールが活躍する場面はデザイナー不在とか、フォトショップで加工するのが面倒、いったような場面になるでしょう。

というわけで、早速、使ってみました。物を錆びさせたり、汚したりするのでは、あまりにもデフォルトすぎて面白くないのでゾンビを血まみれにしてみました。右下に「Toggle」というボタンを用意し、ポチポチ押すとResources.Loadしたテクスチャーが切り替わるようにしました。
なお、切り替わるテクスチャーは計3枚で、最初の一枚がデフォルトのもの。それ以外は、Worn Edgeを使用して生成したテクスチャーです。
f:id:sunarit:20150920050511g:plain
ひととおり使い方さえ覚えれば、デフォルトのテクスチャーを元にこの程度の派生テクスチャーを作る時間は5分程度で可能です。
基本的に「エッジを汚す」ことに主眼が置かれたツールのため、使い道がいろいろと限られてくるので万人にオススメできるとは思いませんが、デザイナー不在であるとかテクスチャーをフォトショップで加工するのが面倒、という方にオススメです。
[Unity 5対応]
Asset Store

Sensible Sale

9/15から約1週間の間、「Sensible Sale」が開催中です。

とりあえず購入したのは、以下の4本です。

Editor Console Pro
コンソール拡張プラグインです。
これでDebug.Log();とサヨナラしたいと思います。

Mad Compile Time Optimizer
修正していないスクリプトでも依存関係がある場合、再コンパイルしてしまうUnityですが、これを再コンパイルしないようにできるプラグインです。
結果としてコンパイル時間の短縮が可能らしいです。
ちょっとリスク高いような気もしますが上手く動いてくれるなら、プロトタイプ時のみで使用するつもりです。

Colorify
マスクを使ってテクスチャーの部分色違いを生成できるプラグインです。
モバイルに適したShader Model 2.0だといろいろと制限があるようですが、きっと使う日がくると思うので購入決定です。

Color Grading LUT Pack
文字通りLUTのパックです。
自分でフォトショップを使ってコツコツ彩度や色相を調整しても、なんかピンとこない画になってしまうというデザインセンスの無さから来る簡単には解決できない問題から逃れられるかも、という期待を込めて購入決定です。



他にもいくつか購入検討中のものもありますが、まず購入を決めたのは上記4本でした。
なお、Dialogue System、Skele、Map-ityは既に購入済みです。

【オススメ】Particle Playground

Unityの機能の中で習得が大変なもののひとつと思っているのがパーティクル(Shuriken)です。
ただ単にパーティクルを排出したり、Velocity調整で飛び方を変えるくらいであれば大して難しくないのですが、吹き出す水や火などは試行錯誤が大変で、それらをプリファブ化したアセットも沢山販売されています。
そんなUnityのパーティクル機能ですが、これを劇的に簡単にしてくれるのが「Particle Playground」です。
あらかじめ多くのプリセットが用意されており、水や火などももちろん用意されています。ボタンをポチっと押したら、あとはパラメーターを調整すれば、それっぽいパーティクルがあっと言う間に作れてしまいます。
それくらいであれば、水や火のアセットを購入すればいいんじゃないのか?って言う気もしますが、このParticle PlaygroundではSkinned Meshやテクスチャーも簡単にパーティクルの排出元にしてくれます。
というわけで、走る犬の3Dモデルをパーティクル化したのが下のアニメーションです(普通に黒背景で作っても面白くないので、背景をuGUIのPanelにしてみましたが、ちょっと見づらくなってしまいました。ごめんなさい)。
f:id:sunarit:20150915003950g:plain
慣れれば、こんな表現が10分程度で作れてしまうParticle Playgroundですが、やはり要スクリプトです。
上の走る粒子犬は、5秒後に粒子が吹き飛ぶように指定してあります。これはスクリプトのコルーチンで実現しています。

具体的にはこんな感じです。

	IEnumerator emit() {
		yield return new WaitForSeconds(3.0f);
		particles.emit = true;
		particles.turbulenceStrength = 0f;
		yield return new WaitForSeconds(5.0f);
		while(particles.turbulenceStrength < 30) {
			particles.turbulenceStrength = particles.turbulenceStrength + 25*Time.deltaTime;
			yield return null;
		}
		yield return new WaitForSeconds(1.0f);
		particles.emit = false;
	}

特に説明する必要もないコードですが、ノースクリプトだとただ単に走るだけの粒子犬になってしまいます。
あくまでParticle PlaygroundはShurikenのラッパー + 拡張的なものなので、仕方ないところです。

また、いくらShurikenよりも簡単とは言え、調整のパラメーター項目はそこそこの数がありますので、ある程度思い通りにコントロールできるようになるまでには若干の習得時間が必要になると思います。この辺は、豊富なサンプルシーンとチュートリアル動画でだいぶ軽減されてはいますが。

最後に。
「UnityのShurikenは調整が難しい、でも、やっぱりパーティクルは使いたい」という方には文句なしにオススメです。
ただ、通常価格70USDはその価値はあるとは思いますが、やはり高いですね。
ちょっと調べてみましたが、私が購入したのは昨年の11月のセールの時で21USDでした。
このParticle Playgroundは度々セール対象になっているのを見ているので、セールを待ってみるのもいいかもしれません。

[Unity 5対応]
Asset Store

Instant Good Day

前にセールの時に購入していた「Instant Good Day」を実際にテストしてみました。
バージョンは1.4です。
この「Instant Good Day」で何ができるのかというと、いわゆるDay/Nightサイクルを実現するアセットです。オープンワールド系などのゲームで実装されている、昼 -> 夜 -> 昼 -> 夜が表現可能になります。
有名どころでは「Time of Day」や「Sky Master ULTIMATE」などがあり、この「Instant Good Day」は新参ということになります。
「Instant Good Day」の特徴は、その名の通り、「手軽(Instant)」です。
とりあえず、インポートしたアセット内にあるInstantGoodDayプリファブをヒエラルキーに放り込めば完了です。
後はUnityのプレイボタンを押せば、昼 -> 夜の繰り返しが実現します。
下のGifアニメは24時間の時間経過を10秒で再現するようにセットし、iPhone上で実行したものです。
f:id:sunarit:20150829020633g:plain

スクリプトから任意で時間を指定するのもとても簡単で、
SetMilitalyHour ();
に時間を放り投げれば任意の時間に設定することも可能なので、DateTimeでデバイス時間を取得し、InstantGoodDayの時刻を設定する、というのも簡単です。

また、この「Instant Good Day」はDay/Nightサイクルを通常のアニメーションデータを使用することによって実現しているため、明るさ等のカスタマイズも簡単ですし、実行プロセスもかなり軽量です(アニメーションデータ分、使用メモリが増えていますが)。

と、ここまでいいことずくめのように聞こえますが、欠点は表現が非常にシンプルということです。
悪く言えば単調です。
このアセットを使用したアプリケーションはみな似通ったものになりそうな気がします。

最後に。
あくまで個人的な評価ですが、「Time of Day」、「Sky Master ULTIMATE」と比較してみました。

【セットアップ難易度(面倒さ)】
Instant Good Day < Time of Day << Sky Master ULTIMATE

【表現力 = カスタマイズの自由度】
Instant Good Day << Time of Day << Sky Master ULTIMATE

CPU使用率(設定にモバイル最適化がある場合は最適化しています)】
Instant Good Day < Time of Day < Sky Master ULTIMATE

冒頭でも述べましたが、この「Instant Good Day」は半額セールで購入価格は15USDでした。
セットアップ難易度ほぼゼロというメリットは、「とりあえずDay/Nightサイクルを入れたい!」という思いに十分応えてくれるものだと思いますが、通常価格である30USDだと、ちょっと高いなっていう気もします。

[Unity5 対応]
Asset Store

【セール!】Texture Overview Pro

本日のアセットストア 24HOUR SALEは「Texture Overview Pro」です!
このアセットで何ができるかというと、
・シーンで使用しているテクスチャのサイズを含めた一覧表示
・プロジェクト全体のテクスチャのサイズを含めた一覧表示
・ランタイム時のメモリ使用量
などなど。

使用時はこんな感じで使用しているテクスチャを表示してくれます。
f:id:sunarit:20150720013320p:plain

Build Report Toolでも同じような情報を取得可能ですが、ビルドしなくても知りたい時に調べられる Texture Overview Pro は重宝します。
(むしろ、Unity自身にデフォルトで実装されるべき。)

機能としてはシンプルなので通常価格 35USD は高いような気がしますが、半額セール価格 17.5USD なら、納得できる価格ではないかと思います。

モバイルをターゲットにした開発ではメモリの使用量、特にテクスチャのファイルサイズが大きく影響してきますので、調査を楽にしてくれる Texture Overview Pro は持っていて損はないアセットです。

日本時間 7/20 午後10時頃にはセールは終了しますのでお早めに!

[Unity5対応]
Asset Store