原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】DOTweenのDOCounterは使い方に注意が必要

f:id:Karvan:20220405201434p:plain

憑りつかれる

帰宅したらゲーム制作しようブログのネタを考えよう、と心に誓うのに、帰宅後は何故かPSのコントローラーを握り、狭間の地を彷徨っている皆さんこんにちは。前作のダークソウルではゲーム内で「ソウルに憑りつかれる」というセリフがよく使われていましたが、まさにエルデンリグに憑りつかれている状態なのかもしれない。

 

DOCounter

DOTweenのPro版(有料版)には無料版には無い便利な機能が幾つかあり、その中の一つにDOCounterというAPIがあります。
これはTextMeshProでint型によるカウンターが実装できるAPIで、例えばSTGのスコアや、RPGの経験値等の値が変わる際のアニメーションを作るときに有用なAPIです。

現在の値=10000から新しい値=30000に変わるアニメーション

f:id:Karvan:20220405201624g:plain
f:id:Karvan:20220405201700p:plain

上のソースコードで分かるように任意の時間で値を変化させられるので、変更したい値=変更する時間とすればカウントアップ(ダウン)タイマーとしても使えるかと思ったのですが、そのような使い方をしたい場合はちょっとだけ注意が必要なようです。

 

カウントアップ(ダウン)タイマー

経過時間や制限時間を表示させるタイマーを作る場合、1秒間で数字が1加算(減算)されれば良いので、0→60に変化させたい場合は動作時間に60.0fを指定すれば良い(EasingはLiner)という事になります。

f:id:Karvan:20220405201920p:plain

では、実際にどうなるか見てみましょう。比較としてFixedUpdateでTime.deltatimeから計算した経過時間を上に表示します。

f:id:Karvan:20220405202010g:plain

う~ん、明らかにカウントが早いです。実際の時間より0.5秒ぐらい早いタイミングでカウントがアップされています。

 

恐らくDOCounter内では時間の経過をFloat型で計算しつつ、TextMeshProにInt型で引き渡す際に四捨五入して引き渡しているのでしょう。

f:id:Karvan:20220405202115p:plain

 

試しにDOVirtualを使ってInt型の数字を同じようにカウントアップさせて比較しましたが結果はどちらも同じタイミングでカウントアップされます。

f:id:Karvan:20220405202242g:plain
f:id:Karvan:20220405202324p:plain

どちらも0.5秒ぐらい早い

まぁ、DOVirtualはFloat型でも数字を変更できるのでFloat型でカウントアップさせてInt型にキャストすれば正確にカウントアップタイマーとして動作します。

f:id:Karvan:20220405202440p:plain

こうすれば・・

f:id:Karvan:20220405202451g:plain

DOVirtualを使ったほうは正しくカウントアップされます。ではDoCounterではどうするか・・・

 

対処法はなし

元も子もない結論ですが、、DOCounterは残念ながら指定できる数字はInt型固定なのでDOViratualのような対処はできません。

暫定的にSetDelayで0.5秒開始を遅延させる対処を取れば表示の問題は解決します。

f:id:Karvan:20220405202811g:plain
f:id:Karvan:20220405202831p:plain

が、OnCompleteのコールバックでタイマーの終了を検知して処理をしたい場合はDelayを設定した分、完了タイミングがずれてしまうので根本的な解決法にはなりません。

DOCounterはタイマーとして使用するのでなく、時間経過とは関係のない値の表示に使用した方が良いと思います。

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。