【AviUtl】スクリプト制御の覚書2【拡張編集】

AA2014000387

スクリプト制御で経過時間を基準にオブジェクトを変化させたいときに少しばかりハマったのと個別オブジェクトの位置取得の方法がわからず右往左往したので、その覚書。

時間を基準にした変化の基本条件式

フェードイン&フェードアウト的に秒数を設定してやり、配置したオブジェクトの前後で指定秒で変化。

 

tb=obj.track0 --トラックバー(時間設定)
(tb-obj.time)/tb > 0 --登場の条件式
tb-(obj.totaltime-obj.time)/tb > 0 --退場の条件式

これをif構文の条件に使用する。/chkなどと併用すると前だけ、後ろだけ有効といった感じでも使える。

指定時間を基準にして徐々に変化

指定秒数で徐々に表示されたり、透明になったりといった場合の基本型。

 

obj.alpha=obj.time/tb  --時間経過で透明→表示
obj.alpha=(obj.totaltime-obj.time)/tb --時間経過で表示→透明

 

これをif構文に使用する。obj.alphaをobj.zoomにしたり、他のAviUtlの変数にしたりしてもいい。

指定時間を基準にして回転(滑らかに接続)

指定秒数で回転が綺麗に接続されるようにする場合の基本型。

 

obj.rz=(obj.time-tb)/tb*360*係数 --登場時
obj.rz=(obj.totaltime-obj.time)/tb*360*係数 --退場時※ 係数:オブジェクトの回転数

 

これをif構文に使用する。obj.rzをobj.rxやobj.ryにしても可。

個別オブジェクトのそれぞれの位置取得

個別オブジェクトの位置を取得し、色々する場合の基本型。これをやっておかないと、個別オブジェクトは座標を指定したときに非常に厄介なことになる。また、参考にさせてもらったのは応用テクニック - AviUtlスクリプト Wiki

 

 if((tb-obj.time)/tb>0 and chk1==1)then
obj.zoom=obj.time/tb
-----ここから初期位置取得-----
if(obj.index==0)then --★
if(op==null)then --★
op={} --★
end --★
end --★
orh={}
op[obj.index+1]={obj.ox,obj.oy} --★
-----ここまで初期位置取得-----
for i=1,obj.index+1 do --★
orh[i]=obj.rand(0,100)/100*距離
-----ここから新位置指定-----
obj.ox=op[i][1] --★
obj.oy=op[i][2]+orh[i]*(1-obj.time/tb) --★
-----ここまで新位置指定-----
end --★
end

 

個別オブジェクトのそれぞれの位置を取得し、それにランダム値をプラス、更に指定秒数で……というときの基本型。★がその部分。orhの配列はオブジェクトにプラスするランダム値(高さ)を取得するためのものとその値。

実行すると、バラバラの高さにある個別オブジェクトが時間経過によって徐々に大きくなりながら落ちてきて、初期位置に収まる。chk1は効果の有効・無効の指定。

極めて個人的なこと

  • 配布物の場合、表示をもっとわかりやすく。
  • トラックバーとして使う変数、ダイアログの設定で使用する変数の使い勝手的な考慮。
  • 機能の精査。(どこまで機能を載せるのか。載せすぎると特定パターンでしか使えないし、逆に載せないとやりたいことが簡単にできなくなる)
  • 使っていないAviUtlやLua関数の使用。(スキルアップというかできることを増やすため。スクリプト作成は主にコレが目的なので。★★★)
  • もっと綺麗で無駄のないスクリプトを書く。

 

 

  • AviUtlのスクリプトでwhile構文を使うスクリプトは地雷……?
  • ???

 

ノートPC用のACアダプタが壊れて、メーカーに新しいアダプタを発注して一ヶ月弱待ったときに左のコレが発売されていたら良かったのに。orz

関連記事
スポンサーサイト

0 Comments

Post a comment