募集要項

  • ■ボイスの募集は終了しました。

    非常に沢山のご応募ありがとうございました!

     結果はこちら
2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

« 【Unity Action】 破壊オブジェクトからのドロップアイテム | トップページ | 【Unity Action】 ヒットストップ(スロー)修正 »

2013年6月 2日 (日)

【Unity Action】 ポーズメニュー怖い(Time.timeScale = 0 関連の話)

と、いう訳で、ポーズメニューの処理を一通り実装してみました。
久しぶりに動画でペタリ(ポーズ部分)。

ちょっと見た目が安いので、追々見た目は調整予定ですが、
処理的には一段落です。

今までは、バトル中に装備変更とかできてましたが、
本来は想定してない仕様なので、色々シンプルになってます。

で、ポーズメニューで出来る事自体は少ないので、
サクッとできるかなーとか
甘いこと考えてましたが、
思いの他手こずりました…。

ポーズメニューには前提として、
「Time.timeScale = 0;」で時間の経過を止める
事をしています。
そうしないと、動くすべての物に対して静止処理が必要になり、
大変な上にバグが山のように出る事が懸念されたため。

で、今回問題になったのは、おおよそtimeScaleが0なのが原因です(笑)

以下、引っかかった点等のメモになります。


■timeScale0だとアニメーションが再生されない

  これは「前の記事」でも問題にしてましたが、
  時間が静止しているので、
  animation.Play("xxx")や、iTween.xx等はまともに機能しません。
  なので、動かすオブジェクトに対して、
  自力で時間経過をお知らせする必要があります。

  
  animation["アニメーション名"].time += 経過時間;

  とかですね。
  経過時間の取得は、「前の記事」のコメントにて助言頂いた
  やり方で取得するようにしました。

  併せて、そのスクリプトは、ポーズ中のみ機能さるようにしましたが、
  スクリプト実行後即上書きしたdeltaTimeを使用すると、
  数値が不安定でしたので、若干バッファを入れたりしてます。

■アニメーションの終了の取得
  当然ながら、timeScaleが0だと、自動でモーションは終わってくれないので、
  自力で取得する必要があります。
  if(!animation.IsPlaying("アニメーション名")
  で、再生されてるかどうか判別可能。
  モーションの長さは
  animation.["アニメーション"].length;
  で取得可能。

  その辺りを元にモーションの終了を取得しましょう。
  ただ、while等でループしている場合、連続で同じモーションが
  呼ばれると、処理が重複してしまう可能性があるため、
  それ+αの判別を必要に応じて用意する必要も。

■アニメーションイベントが取得されない
  timeを主導で加算してる関係で、
  アニメーション自体にイベントを仕込んで関数を呼べないようです。
  なので、animation["アニメーション名"].time で現在の時間を参照して
  必要に応じて関数を呼ぶ等が必要でしょうか。

■「AudioSource.PlayClipAtPoint()」やNGUIの「Button Sound」が使えない
  timeScaleが0の場合、
  PlayClipAtPoint()やButton Soundを使用してもサウンドが再生されません。
  自力でAudioSourceの付いたオブジェクトを用意してそこに対して
  PlayOneShot等で再生しました。

■ボタンの封印
  これはポーズ画面に限った事じゃないですし、
  TimeScaleも関係ないですが一応。
  コントローラー操作と違い、スマートフォンだと
  同時、連続でタップできてしまうので、
  その時々でちゃんとボタンのColliderのON/OFFを
  切り替えましょう。

■NGUI(Tween)は案外動いた
  TimeScaleが0でも、Tweenxx系はちゃんと動いてました。
  ……PanelのAlphaくらいしか使ってませんが。



といった感じでしょうか。
書くと一瞬ですが、各所で色々な試行錯誤が行われてます(汗
まだまだ勉強が足りません…( ̄Д ̄;;

« 【Unity Action】 破壊オブジェクトからのドロップアイテム | トップページ | 【Unity Action】 ヒットストップ(スロー)修正 »

Unityアクションゲーム製作」カテゴリの記事

コメント

参考になりました。

NGUIのTweenは「Ignore Time Scale」のチェックがONだと(デフォルトON)
タイムスケールを無視して動き続けるみたいですね。

参考になります(^^)
自分もポーズ中の挙動について気になってたのでありがたいです

>West Hillさん
なるほど、NGUIのTweenにはTimeScaleのチェックあったんですね。
気づいてませんでした(笑)

>0号さん
何か参考になる点があったのであれば幸いです(>Д<)ゝ

ちなみに、NGUIにIgonoeTimeScale.realTimeDeltaっていうのが用意されてます。
TimeScale=0のときにTweenを動かしてる元みたいですが、
自作関数を作らなくても、これを使えば行けそうです。

>まるさん
なるほど、NGUI側で経過時間取得してたんですね。
で、あれば、NGUIを使っている場合は、そちらでも良さそうですね!

勉強になります(*゚▽゚)ノ

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1500357/51879680

この記事へのトラックバック一覧です: 【Unity Action】 ポーズメニュー怖い(Time.timeScale = 0 関連の話):

« 【Unity Action】 破壊オブジェクトからのドロップアイテム | トップページ | 【Unity Action】 ヒットストップ(スロー)修正 »

Twitter等

  • にほんブログ村 ゲームブログ ゲーム制作へ

メールフォーム

  • 直接コンタクト取りたい方はこちらからどうぞ

サイト内検索
ココログ最強検索 by 暴想