Blog ブログ

Unity使っているのにオソい

こんにちはエンジニアの島鼻です。
前回UnityのTipsとして時短を上げましたが、
今回も速度を求められて来た中でやってみた事を書いてみます。

大掛かりなシステムのブログに憧れますが、現場レベルの小さな積み重ねも力に変えて行きたいですね。

 近年アクション要素や、エフェクトが増えたゲームが沢山登場しています。エフェクトがあると演出が終わるまで待たなければならないので、デバッグに時間がかかります。通信であれば、リクエストデータを送るだけなのですが、データの整形が難しかったりしてやっぱり時間がかかってしまったり。また、開発体制的にデバッグ機能の入れ込みを行えなかったりで、結局普通にゲームをプレイしてデバッグをせざるを得ないなど…。

(´・ω・`)<お、終わらん。実装が終わらん。。楽しそーな演出がニクいぜー


Unityのパワーを使いましょう。

Time.timeScale
http://docs.unity3d.com/ScriptReference/Time-timeScale.html
Unityのメニューより、[ Edit ] -> [ Project Settings ] -> [ Time ] -> [Time Scale]

これは何でしょうか?Unityの物理挙動やアニメーションのタイムスケールを制御するもので1.0でリアルタイムです。0.5にするとアニメや物理の速度が遅くなり、0で完全に止まります。

使用用途としては、スローモンションやポーズ機能と言ったところでしょうか?
演出としてスローモーションを使ったり出来る大変便利なものです。

では、前置きが長くなりましたが、Time.timeScaleに100位入れてデバッグしましょうと言う話です。ゲームが100倍速く動きます。(端末の力の限り動きます。はい。)

そうする事で、演出が多くなってしまったゲームの演出のアニメスピードを上げてサクサク実行。アクション要素があり、ゲームをプレイしなければ次に進んで行かないゲームでもスマホアプリの場合、自動で動く事が多いので基本放置でデバッグ出来たりします。

簡易的なスキップ機能と言う訳です。実装として、演出スキップ機能をTime.timeScaleを使用して、行う事もありました。
これで、また1つ時短が出来ました!

補足
このTime.timeScaleに依るゲーム内速度調整が適用されるのは、Time.deltaTimeの掛かっている値、若しくはFixedUpdate()の中で実行されている処理に限られます。
iTweenも問題なく適用されます。また、Time.timeScaleを使った実装がどこかに盛り込まれている場合は、簡単に適用出来ない場合があるかもしれません。その場合はGameObjectを1つ配置してTime.timeScaleを100にし続けると言った事をやっていました。