Script オペレータの例
 
 
 
 

   

パーティクル フロー クイック ナビゲーション

説明:

既定の Script オペレータ スクリプトのサンプル (詳細コメント付き) を示します。

用途:

Script_Operator は、これを既定のスクリプトとして使用します。

効果:

このスクリプトは、パーティクルの速度を遅くします。パーティクルの速度が十分に低下すると、最初の 50 パーティクルが分離されてワールド X 軸の負の方向に移動するストリームに入れられ、残りのパーティクルは反対方向に移動します。

例:

--ChannelsUsed ハンドラは、スクリプトに提供される
--チャンネルを定義します。
--すべてのチャンネルのリストについては、
--インタフェース: MaxscriptParticleContainer を参照してください。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
on ChannelsUsed pCont do
(
pCont.useTime = true--時間チャンネルを有効にします。
pCont.useSpeed = true--速度チャンネルを有効にします。
)
 
--初期化時には Init ハンドラが呼び出されます。
--この例では使用しません。
on Init pCont do
(
)
 
--Proceed ハンドラには、パーティクルに割り当てる
--メイン スクリプトが含まれています。
--ハンドラに渡されるパラメータ pCont には
--スクリプトの適用先のパーティクル コンテナが含まれています。
on Proceed pCont do
(
--パーティクルの合計数を取得します。
count = pCont.NumParticles()
--フレームあたり 1 ユニットを「遅い速度」とします。
slowSpeed = 1/160.0
--フレームあたり 0.01 ユニットを「非常に遅い速度」とします。
verySlowSpeed = 0.01/160.0
--フレームごとのランダムな角度偏差を定義します。
divAngle = 12.0
--開始時間をティックで取得します。
--時間の値を浮動小数点値に変換すると、結果はティックで表されます。
tStart = pCont.getTimeStart() as float
--終了時間をティックで取得します。
tEnd = pCont.getTimeEnd() as float
--時間間隔をティックで計算します。
timeDif = tEnd &endash; tStart
--フレームに変換します (30 fps NTSC を使用する場合は 160 ティック/フレーム)。
timeDif /= 160.0
--ドラッグ係数を定義します。
dragCoef = 0.08
 
 
--1 からパーティクルの数だけループします。
for i in 1 to count do
(
--コンテナ内のパーティクル インデックスに現在の i 値を設定します。
--コンテナ内の i 番目のパーティクルが現在のパーティクルになります。
pCont.particleIndex = i
 
--パーティクル速度が早い場合は、遅くします。
if length (pCont.particleSpeed) > slowSpeed then
pCont.particleSpeed -= dragCoef*timeDif*pCont.particleSpeed
 
--パーティクル速度ベクターの長さを計算します。
newLen = length(pCont.particleSpeed)
--現在の速度が「非常に遅い速度」に定義された値より大きい場合、
--偏角を使ってランダムな発散を計算します。
--それよりも更に遅い場合は、角度ではなく
--固定値を使用します。
ifnewLen > verySlowSpeedthen
pCont.particleSpeed = pCont.randDivergeVector(pCont.particleSpeed)(divAngle/(160*newLen))
else
pCont.particleSpeed = pCont.randDivergeVector(pCont.particleSpeed)(180.0)
 
--十分に遅い場合、最初の 50 パーティクルが左へ移動します。
--ID が 50 より大きいパーティクルは右へ移動します。
iflength(pCont.particleSpeed) < 1.5*slowSpeedthen
(
ifpCont.particleID < 50then
pCont.particleSpeed += [-0.005*timeDif, 0, 0]
else
pCont.particleSpeed += [0.005*timeDif, 0, 0]
)
)
)
 
--Release ハンドラを使ってクリーンアップを行います。
--この例では使用しません。
onRelease pContdo
(
)
関連事項