説明:
次の例では、既定値の Birth_Script スクリプト (詳細コメント付き) を示します。
用途:
このスクリプトは、Birth_Script アクション内の既定値のスクリプトとして使用されます。
効果:
このスクリプトによって、きれいなパーティクル パターン (精巧な正弦曲線によって作成されたらせんなど) が生成されます。このスクリプトによる効果を確認するには、以下を実行します。
-
3ds Max の[作成]パネルから、シーン内に既定値の PF_Source を作成します。
-
[パーティクル ビュー]を開きます。
-
Birth アクションを Birth_Script アクションで置き換えます。
-
Speed、Position、および Rotation の各オペレータを削除します。
-
時間を取り消します。
例:
|
--ChannelsUsed ハンドラは、スクリプトに提供される
--チャンネルを定義します。
--すべてのチャンネルのリストについては、
--インタフェース: MaxscriptParticleContainer を参照してください。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
onChannelsUsed pContdo
(
pCont.useTime = true--時間チャンネルを有効にします。
pCont.useAge = true--エージ チャンネルを有効にします。
pCont.usePosition = true--位置チャンネルを有効にします。
pCont.useSpeed = true--速度チャンネルを有効にします。
)
--初期化時には Init ハンドラが呼び出されます。
--この例では使用しません。
on Init pCont do
(
)
--Proceed ハンドラには、パーティクルに割り当てる
--メイン スクリプトが含まれています。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
on Proceed pCont do
(
--開始時間を浮動小数点で取得します。これによって、時間がティックに変換されます。
t1 = pCont.getTimeStart()asfloat
--終了時間を浮動小数点で取得します。これによって、時間がティックに変換されます。
t2 = pCont.getTimeEnd()asfloat
--負の時間の値は強制的に 0 にします。
if (t1 < 0)then(t1 = 0)
--終了時間が 100 フレーム
--(30 fps の NTSC で、フレーム当たり 100 フレーム * 160 ティック) より小さい場合
if (t2 < 100*160) do
(
--時間を 8 で割った値を使用してループを実行します。
--これによって、パーティクルが 8 ティック毎に作成されます。
for i in (t1/8+1) to (t2/8) do
(
--変数 curTime を実際の時間 (ティック単位) に設定します。
curTime = 8*i as float
--新しいパーティクルを発生させます。
pCont.AddParticle()
--追加された最新のパーティクルのインデックスを取得します。
pCont.particleIndex = pCont.NumParticles()
--パーティクルの現在の時間をフレームで設定します。
--(30 fps NTSC アニメーションでは、1 フレームに 160 ティック)
pCont.particleTime = curTime/160
--パーティクルのエージを 0 (生まれたて) に設定します。
pCont.particleAge = 0
--現在の時間の sin に基づいて半径の変数を定義します。
sh = 2*sin(5*curTime)
--現在の時間に基づいて角度の変数を定義します。
ang = 0.2*curTime
--上記の変数を使用して、パーティクルの位置を設定します。
pCont.particlePosition = [sh*sin(ang), sh*cos(ang), 0]
--同じ変数と、Z 軸に沿った下降を使用して、速度を定義します。
pCont.particleSpeed = [0.01*sin(ang), 0.01*cos(ang), -0.005]
)
)
)
--Release ハンドラを使ってクリーンアップを行います。
--この例では使用しません。
onRelease pContdo
(
)
|