前に以下の記事でポーズ時のアニメーションを実効する方法について書きました。
Unityでポーズ中のアニメーションと遅延処理を行う方法
上記記事では、AnimatorのUpdate ModeをUnscaled Timeに設定することで実現しています。
Unityでポーズ中のアニメーションと遅延処理を行う方法
上記記事では、AnimatorのUpdate ModeをUnscaled Timeに設定することで実現しています。
が、よくよく読んでみると、Animationとして登録しているものにしか対応していません。
Invoker.InvokeDelayedによる遅延処理はアニメーション用ではないので(やろうと思えばできるでしょうが…)。
というわけで、今回はポーズ中のアニメーションをもっとスマートに実現する方法として、DOTweenをご紹介させていただきます。
iTweenは手軽にアニメーションできるので便利ですが、uGUIの要素をアニメーションさせることができなかったり面倒だったりという面がありました。
DOTweenはRectTransformなどの変更に対応しているため、簡単にアニメーションを実行できます。
DOTweenでuGUI要素をアニメーションさせる具体的な方法については、下記ブログなどを参考にしていただくのがいいと思います。
簡単な導入フローを書くと、以下のようになります。
【1】DOTweenをダウンロード
【2】Assetsに入れる
【3】UnityエディタのToolsからセットアップ
注意が必要な点としては、DOAnchorPosなどのuGUI要素をコントロールするためには、Tools > DOTween Utility PanelからSetup DOTweenを実行する必要があるということが挙げられます。
【1】DOTweenをダウンロード
【2】Assetsに入れる
【3】UnityエディタのToolsからセットアップ
注意が必要な点としては、DOAnchorPosなどのuGUI要素をコントロールするためには、Tools > DOTween Utility PanelからSetup DOTweenを実行する必要があるということが挙げられます。
ユーティリティーパネルからPreferencesを開き、TimeScale Independentにチェックを入れれば、ゲーム中のタイムスケールに関係なくアニメーションを実行することができます。
あとは以下のような感じでアニメーションの指定を行えば、ゲーム中のタイムスケールに関係なくアニメーションを実行することが出来ます。
RectTransform rt = GetComponent<RectTransform>(); rt.DOAnchorPos(new Vector2(100, 0), 0.5f);
なお、アニメーションのタイムスケールをゲームのものと合わせたいときには、以下のように個別にタイムスケールを設定することもできます。
rt.DOAnchorPos(new Vector2(100, 0), 0.5f).timeScale = Time.timeScale;
iTweenを使ったことのある人もそうでない人も簡単に導入できると思いますので、コード側でアニメーションの実行をしたいという方は検討してみてもいいと思います。
ちなみに私はMecanimはとても苦手です…(^_^;)
ちなみに私はMecanimはとても苦手です…(^_^;)
コメント