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

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

【Unity】DOTweenを使ったuGUIアニメーション

ピリピリ

「本当はやりたいんでしょ?ポケモン」とか「素直になりましょうよ。」とか余計なお世話に感じる今日この頃、「変わらずあなたを待ってますよ。」いやいや、誰もがポケモンで遊んだ事がある前提で話さないで下さい。こっちはメガドラ派なんで、ゲームギア派なんで。

そんな感じで、今週から突如やってきた寒波の影響か肌も心もピリつく日々を過ごしている皆さんこんにちは。私は一刻も早く潤いが欲しいです。いや、ホント。

 

みんな大好きDOTWeen

さて、DOTweenというアセットは無料版が存在することもあってUnity界隈では広く使われているアセットだと思います。
名前の通りTween系のアセットなので主にSpriteや3Dオブジェクトを移動・アニメ動作させる為に使用されますが、用意されている関数は非常に多くてイメージ画像やボタンなどのuGUIについての関数も用意されています。

 

dotween.demigiant.com

パネルのスライドIN/OUTやボタンをクリックした時のアニメ動作もDOTweenを使うことで比較的シンプルなコードで実装することができ、シーケンスと組み合わせればインパクトのあるUIを実現できる・・・かもしれません。

よって今回はuGUIアニメーションで使えるDOTweenの関数をご紹介。

 

前準備

前提としてuGUIを動かす場合はRectTransformに対してTweenを指定します。
この為、DOTweenを使う前にGetComponentでRectTransformを取り出しておく必要があります。

RectTransform ImageRect = ImageObj.GetComponent<RectTransform>();

別にDOTweenを使用する毎にGetComponentを行ってもよいのですが、性能を考えると上のように事前に動かしたいuGUIのRectTransformをキャッシュしておくのが良いかと思います。

 

DOAnchorPos

RectTransformを平行移動させるTweenにはDOAnchorPosを使用します。

DOAnchorPos(Vector2 目的位置, float 動作時間)

ここで目的位置に指定するPositionはInspectorのRectTransform欄にある[PosX][PosY]を指します

f:id:Karvan:20200114221403p:plain

 

今回はマスクとその子オブジェクトの画像を平行移動させることでボタンの画像が変わるアニメを作ります。


Hierarchy上の定義はこんな感じ、変わる前の画像が「NonSelectIamge」、変わった後の画像が「SelectImage」でMaskImageでマスクされています。

f:id:Karvan:20200114221451p:plain

 

Game空間上の配置はボタンの上に「NonSelectIamge」と「SelectImage」を重ねて置いてMaskImageをボタンの横に配置します。

f:id:Karvan:20200114221556p:plain

 

この状態でDOAnchorPosを使ってマスクを右にスライドさせるのと同時に、マスクの子画像であるSelectImageを逆方向(左)にスライドさせます。

SelectImageを逆方向にスライドさせるのは、これによりSelectImageのWorld空間での位置は変わらないので、マスクと重なった部分だけが浮かび上がってくるようなアニメになるためです。

MaskImageRect.DOAnchorPos(Vector2.zero, 0.8f);		// 元の位置(X=-162)からX=0の位置へ
SelectImageRect.DOAnchorPos(Vector2.zero, 0.8f);	// 元の位置(X=162)からX=0の位置へ

これを実行させるとこんな感じのアニメになります。

f:id:Karvan:20200114221821g:plain

 

DOSizeDelta

SelectImageはMaskImageの子オブジェクトなのでMaskImageのScaleを変えると当然影響を受けてSelectImageもScaleが変化します。


しかし、RectTransformのsizeDeltaを変えた場合はその限りではありません
sizeDeltaはInspectorのRectTransform欄にある[Width][Height]を指します。

f:id:Karvan:20200114221925p:plain

 

よって、MaskImageのHeightやWidthを変えることでもSelectImagが浮かび上がってくるようなアニメを作ることができます。
DOTweenでsizeDeltaを変えるにはDOSizeDeltaを使用します

DOSizeDelta(Vector2 目的サイズ, float 動作時間)

今回はHeightの値を0から本来の値へ変化させています。

f:id:Karvan:20200114222146g:plain

 

DORotate/DOLocalRotate

uGUIを回転をさせる場合は3Dオブジェクトと同じようにDORotate/DOLocalRotateを使用します。
こちらも上と同じようにRectTransformに対してTweenを使用します。

DOLocalRotate(Vector3 目的角度, float 動作時間)

今回はZ軸に対して180度回転させています。

f:id:Karvan:20200114222356g:plain

 

DOColor

uGUIのColorもTweenさせることができます。

ただしこの場合はRectTransformではなくImageコンポーネントに対してTweenさせるので事前にImageコンポーネントを取り出す必要があります。

FrameImage = ImageObj.GetComponent<Image>();
FrameImage.DOColor(Color 目的色, float 動作時間)

今回は六角形のフレーム画像と中央の三角アイコン画像の色を入れ替えるように変化させています。

f:id:Karvan:20200114222618g:plain

 

意外と簡単

通常、ボタンを動かす場合はボタンコンポーネントに用意されているTransitionの設定やAnimationを使うことが多いかと思うのですがDOTweenを使用しても意外に簡単に実装することができます。

また、DOTweenのPro版(有料版)になるとInspectorで値を入力してリアルタイムに動作を確認できるエディタも用意されているので、より簡単に複雑なアニメ動作を作ることができます。

 後はセンスの問題、ということで・・・

◇プライバシーポリシー

●個人情報の利用目的

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

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

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

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

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

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

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

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

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

●免責事項

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

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

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

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

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

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