LoginSignup
17
15

More than 3 years have passed since last update.

DOTween完全に理解するその3 UIアニメーション編

Posted at

前回:DOTween完全に理解するその2 Transformアニメーション編

今回解説するアニメーション

今回は主にUIに関するアニメーションを解説していきます。
UI系のアニメーションもかなりお手軽にアニメーションが作れるのでとても便利です。
uiBasic.gif
ui2all.gif

メソッド名 メモ
DOColor Colorの変更(Graphic,Image,Text,Outline)
DOGradientColor Gradientを使用してColorを変更(Image)
DOFade Alphaの変更(CanvasGroup,Graphic,Image,Text,Outline)
DONormalizedPos系 ScrollViewのスクロール位置を変更
DOText Textに表示される文字列を表示していく
DOValue Slider.Valueを変更
DOFillAmount ImageのFilled設定を変更する

開発環境
Unity:2019.4.0f1
DOTween:v1.2.335

DOColor

var image = GetComponent<Image>();
image.DOColor(Color.Red, duration);

現在値から設定したColorへRGBの値を変更します。
対象コンポーネントはImage,Text,Outline,Graphicです。

ImageとTextはGraphicの派生クラスなので
例えばDOColor()をターゲットに対して行うコンポーネントを作る場合、
GraphicをGetConponent()してDOColor()を実行するように実装すれば、
Image用とText用を別々に作らなくて済みます。
Outlineは派生クラスではないので別に必要があります。
 
また、DOBlendableColor()というAPIがあります。
意味はDOBlendableMove()とかと同じで、値の代入ではなく加算を行います、

DOGradientColor

[SerializeField] private Gradient to;
void Start(){
    var image = GetComponent<Image>();
    image.DOGradientColor(to, duration);
}

対象コンポーネントはImageのみです。
Gradientを引数に渡してグラデーションでColorの変更を行います。
ゲーミング的な表現に使えると思います。カードの枠をオーラみたいにするのとかにも良さそう。

DOFade

var image = GetComponent<Image>();
image.DOFade(0, duration);

対象コンポーネントはCanvasGroup,Graphic,Image,Text,Outline
意味はそのままアルファ値を操作します。
DOColor系と同じくtargetのcolorを変更する為、競合します。
その場合は「Fadeの処理順を後にする」「targetを別にする」などの工夫が必要になります。

DONormalizedPos系

scroll.gif

var scroll = GetComponent<ScrollRect>(); 
scroll.DONormalizedPos(vector2, duration, snapping);
scroll.DOHorizontalNormalizedPos(1, duration, snapping); //横方向
scroll.DOVerticalNormalizedPos(1, duration, snapping);   //縦方向

対象コンポーネントはScrollRectのみです。
終点を0〜1で指定します。スクロール方向や基準点はScrollView側の設定を使用します。
snapping=trueの場合、整数未満の位置を無視して「カクっとスクロール」します。

DOText

ui2text.gif

var target = GetComponent<Text>();
target.DOText( text, duration, richTextEnable, scrambleMode,scrambleChars);

対象コンポーネントはTextのみです。
指定した文字列を順次表示するアニメメーションで、テキスト表示なんかに使えるかもしれません。
scrambleModeは非表示部分にランダムな文字を表示する下の設定になります。

Mode メモ
None 非表示部分は何も表示しない
Uppercase 大文字のみ
Lowercase 小文字のみ
Numerals 数字のみ
All 大文字小文字数字全て
Custom scrambleChars内の文字を使用

サンプルgifのCustomは「X」をscrambleCharsに設定しています。
Numeralsを使えば、リザルトでのスコア表示なんかにも使えるかと思います。

ただ、非表示文字の切り替えは毎フレーム行なっているようです。
なのでtimeScaleを変更しても文字の切り替えは遅くなりません。
timeScaleを小さな値にしても「正しい文字列が表示される間隔」が長くなるだけです。

DOValue

ui2value.gif

var target = GetComponent<Slider>();
target.DOValue(to, duration, snapping);

対象コンポーネントはSliderのみです。
snappingはDONormalizedPos系と同じく「小数点以下を無視します」
サンプルgifの左側はsnapping=trueにしています。

DOFillAmount

output.gif

var target = GetComponent<Image>();
return target.DOFillAmount(to, duration);

対象コンポーネントはImageのみです。
ImageTypeがFilledの場合、その設定を利用つつFillAmountの値を変更します。

サンプルgifは
アニメーションしないImage(白)の前にアニメーションをするImageを3つ配置して
DelayをかけながらDOFillAmount()を行なっています。
「DOFillAmount」のTextは、左詰めにしたTextに対して同じくDOText()を使用してみました。

まとめ

今回はUIに関するDOTweenの解説を行いました。
前回のTransformに作用するTweenと違い、ほとんどの場合は個別のUIに作用します。
あまり深く考えずに使える為、Transform系よりはつまずくことが少ないと思います。

今回UI編ではあるのですがRectTransfrom系とLayoutElement系を解説しませんでした。
これらは他のTweenと比較しても特殊なのと、特に面白い使い方が思いつかなかったので解説しませんでした。
また機会があったら記事にしようかなと思います。

17
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
15