aviutl 汎用のTAスクリプトを作る
avutlにはたくさんの文字アニメーションのためのスクリプトがある
さつきさん作のTAスクリプト群をはじめとして、93さんのTA-Track、mollさんの全自動リリックモーションなど
でも、もっと色々やりたいときがある
イージングでもない好きな移動方法を設定してインさせるとか、けっこう難しかったりする
なので、作りましょう
構想
aviutlのエフェクトの多くはかけ具合をトラックバーで設定できる ここを叩く
まず「範囲指定」みたいな、エフェクトをかける範囲を指定するスクリプトを用意して、文字それぞれに進捗度のパラメータをもたせる
それをトラックバーで呼んで、進捗1の文字には100%の値を、進捗0.5の文字には50%の値を……というふうにエフェクトにトラックバーで値を渡す
作ってみる
code:@TA_C.anm2
@Selector(Index)
--label:TA
--track0:Ease,0,100,0,0.1
--track@offset:Offset,-2000,2000,0,0.1
--track@st:Start%,0,100,0,0.1
--track@ed:Ed%,0,100,100,0.1
--track@slope:Slope,0,1000,10,0.1
local function clamp(value, min, max)
return math.min(math.max(value, min), max)
end
st=(st+offset)/100
ed=(ed+offset)/100
slope=slope/100
local p=obj.index/(obj.num-1) --割合
local t=0
--適当な一次関数+クランプで範囲設定
if p<=(st+ed)/2 then
t=clamp(1+(p-st)/slope,0,1)
else
t=clamp(1-(p-ed)/slope,0,1)
end
t=1-(obj.getvalue(0,(1-t)*obj.totaltime))/100 --イージングを取得する
--グローバル変数にぶち込む
if (_ta_t == nil) then _ta_t={} end
if (_ta_tobj.layer == nil) then _ta_tobj.layer={} end
_ta_tobj.layerobj.index=t
code:TA_C.tra
@TA_C(Track)
local index,ratio = math.modf(obj.getpoint("index"))
local st = obj.getpoint(index)
local ed = obj.getpoint(index+1)
local t=_ta_tobj.layerobj.index
return st + (ed-st)*t
https://gyazo.com/12354b9c3d570ad6c6cb65ea7f16b164
できた
Exedit2で作ってるけどトラックバー周り整理すればutlでも動くと思う
このコードは好きにしてもらって構わないので、がんばって
これの何が嬉しいのかというと、任意のエフェクトでインする効果を作れる
https://gyazo.com/3dec917416c0e827255bdb45cc94d60f
code:TA_C.anm2
@Hide
--label:TA
--track@hide:Hide,0,1,1,1
local t=_ta_tobj.layerobj.index
if math.abs(t)==hide then obj.alpha=0 end
数行のコードで登場前の文字を隠すこともできる
https://gyazo.com/42e4fa7eadfad35924782cd982227379
code:TA_C
@Alternate
--label:TA
--check@inv:Invert,0
if (_ta_tobj.layerobj.index == nil) then return end
if (inv==0) then
if obj.index%2==0 then _ta_tobj.layerobj.index=-_ta_tobj.layerobj.index end
else
if obj.index%2==1 then _ta_tobj.layerobj.index=-_ta_tobj.layerobj.index end
end
https://gyazo.com/da74bd48f1c13a0a3483c6c40cd33dd9
交互に出すこともできる
嬉しいね
デバッグをろくにしていないため相性よくないスクリプトもある 悲しいね