たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Unity】Chronosを使用してゲーム内で時間操作ギミックを導入する

下記ゲーム内でChronosを使用して時間操作をしているので、そのことについて記載します。

c-taquna.hatenablog.com

使用したツール / 環境

  • Unity 2018.13f1

Chronosを使用したギミックについて

www.youtube.com

前の記事でも載せた動画ですが、4s~で敵から飛んでくる攻撃(Cube)が赤くなり、スピードが遅くなっていると思います。これがChronosを利用している箇所です。

どのような処理をおこなっているのか

  1. トリガーを引いている間、ChronosのAreaClockを有効にする
  2. AreaClockを有効にしている間に敵の攻撃が一定の距離に近づいてきたら敵の攻撃のTimeScaleの値を 0.1 にする
  3. TimeScaleが1未満になっているときはキューブの色を赤色に変える

大まかに書くと上記3つの処理で実現できます。2の処理に関しては特に実装なくChronosの機能で実現できるので、1のAreClockを有効にする部分とキューブの色を変える処理を実装すれば問題ありません。

Chronosの使い方

下記で説明した通りです。
c-taquna.hatenablog.com

今回はTimeScaleの値を 0.1 にしています。

今回作成したオブジェクト

f:id:c_taquna:20190107014317j:plain

  • ChronosManager Chronos関連のオブジェクトの親
  • AreaClock Chronosで範囲指定の時間操作を行うためのSphere型のオブジェクト
  • TimeKeeper Chronosを使用するために必須となるオブジェクト。詳細の説明は割愛。
  • AreaClockMaking スクリプトをアタッチするオブジェクト。Chronosを操作するスクリプトはすべてここにアタッチする。

今回のスクリプト

AreaClockの有効化

オブジェクトと同じく、AreaClockMakingというスクリプトを作成しました。

gist.github.com

public GameObject areaClock;

ここでオブジェクトで配置したAreaClockをInspectorから指定します。

areaClock.SetActive(true);

あとは条件によってSetActive(true)したりSetActive(false)したりしています。

_guageDecreasing関連の処理は、下記記事で記載している様に、ゲージの処理に関わる部分です。AreaClockを有効にしている間はゲージが削減するようにしています。あと、ゲージが0以上でないと時間操作ができないようにしています。

c-taquna.hatenablog.com

キューブの色を変更

gist.github.com

今回特別な点でいえば、time.timeScale < 1 の条件を入れているところだけでしょうか

感想

時間操作を使用するともっと面白い表現ができそうな気はする