Godot UI動(dòng)畫相關(guān)經(jīng)驗(yàn)

# Godot UI動(dòng)畫相關(guān)經(jīng)驗(yàn)
## 原始
### 使用AnimationPlayer節(jié)點(diǎn)
AnimationPlayer操作方便,理解簡(jiǎn)單,可以快速對(duì)單個(gè)組件插入關(guān)鍵幀,實(shí)現(xiàn)動(dòng)畫
缺點(diǎn):復(fù)雜動(dòng)畫操作比較困難,關(guān)鍵幀調(diào)整有時(shí)候很累
不能應(yīng)對(duì)需要計(jì)算結(jié)果位置的動(dòng)畫
### Tween節(jié)點(diǎn)
可以應(yīng)對(duì)需要計(jì)算結(jié)果位置的動(dòng)畫
但是需要代碼加持,不支持自定義Transition
如果要自定義,可以參考CurveTween
### lerp 插值代碼
可以應(yīng)對(duì)所有情況,差值可以完全自定義
適合有數(shù)學(xué)功底的同學(xué),可以實(shí)現(xiàn)更趨近于真實(shí)物理的插值動(dòng)畫
## 組件
### 自己造輪子
依托g(shù)odot的節(jié)點(diǎn)樹特性,節(jié)點(diǎn)是天生的組合式編程,通過自定義節(jié)點(diǎn),實(shí)現(xiàn)對(duì)動(dòng)畫的封裝,其實(shí)就是對(duì)Tween或者lerp的轉(zhuǎn)包
### Anima插件
Anima更接近于即插即用型組件,可以非常方便的實(shí)現(xiàn)很多需要大量精力完成的組合動(dòng)畫
缺點(diǎn)就是包的太好了,要想修改的話,就會(huì)比較麻煩
### gdaction
據(jù)作者說更接近c(diǎn)ocos的動(dòng)畫實(shí)現(xiàn)方式,由于我沒用過cocos,所以已不能評(píng)判哪個(gè)引擎更合理
gdaction相比Anima可以進(jìn)行更細(xì)粒度的、更廣范圍的自定義,但是理解起來(lái)也有難度
難度和自己造輪子肯定要低,但也不是0成本
gdaction和Anima都是依托tween節(jié)點(diǎn),所以都需要往場(chǎng)景樹里加節(jié)點(diǎn),所以如果你有代碼是遍歷子節(jié)點(diǎn),要當(dāng)心子節(jié)點(diǎn)可能是這些插件動(dòng)態(tài)添加的,比如我用的行為樹插件,就要求葉節(jié)點(diǎn)不能有子節(jié)點(diǎn)
### SceneTreeTween 3.5版本
SceneTreeTween 是Godot 3.5版本新加入的tween節(jié)點(diǎn),好處是它創(chuàng)建完會(huì)自動(dòng)釋放,并且寫法上改良了很多,可以輕松實(shí)現(xiàn)并行動(dòng)畫,串接動(dòng)畫,通過bindnode方法,可以輕松綁定到目標(biāo)ui節(jié)點(diǎn),這樣如果節(jié)點(diǎn)被釋放,tween可以一同釋放,不用擔(dān)心yield的延遲執(zhí)行問題。
## 結(jié)論:
如果想要快速實(shí)現(xiàn)UI動(dòng)畫,最簡(jiǎn)單無(wú)腦的選項(xiàng)是Anima,但是前提是你玩過一次。幾乎就是復(fù)制黏貼代碼,完成功能
稍微復(fù)雜一些的動(dòng)畫,用gdaction或者SceneTreeTween,非常簡(jiǎn)單就能擴(kuò)展出自己想要的結(jié)果
對(duì)于某些特別的,細(xì)節(jié)爆表的UI演出,也許還需要借助Lerp代碼的方式實(shí)現(xiàn),或者可以考慮下用spine制作完之后,用插件導(dǎo)入
無(wú)論如何,UI部分是制作游戲過程中重復(fù)度最高的工作,動(dòng)畫部分演出有時(shí)又是必不可少,盡量只寫一次代碼,搞定今后遇到的問題,為真正的游戲邏輯或美術(shù)素材付出更多時(shí)間才是上策。
在這里,盡量避免寫只能用一次的代碼。使用插件或者封裝都是比較好的選擇