RealFlow 學習筆記 009 – Python Script 的 setVelocity 使用

簡述

以 particle 的 setVelocity Method 來直接指定粒子的速度,以達成粒子完全控制。詳情可找手冊的 PB_Particle 章節,找到 setVelocity 來用。


程式

雖然寫在 Batch Script 也可以,但是執行條件會比較狹隘 (時間軸必須是最新一格,否則無效),而且寫在 Batch Script 的話,我們賦予的速度,將被 RealFlow 當做那一格的初始速度,RealFlow 會以初始速度搭配黏滯、場等做用力計算後,才以最終速度讓粒子運動,也就是說很可能無法達成我們的預期效果。

所以寫在 Simulatiob Flow (即表達式) 的地方會比較好,放在正確的函數位置,就可以讓我們賦予的速度成為粒子的最終速度,也就能按照預期的行為來跑了。

我把程式放在 onSimulationStep 段落

import random
def onSimulationStep():
  cf=scene.getCurrentFrame()
  particles3 = Circle01.getParticles()
  if  cf <= 435:
     for particle in particles3:
       nowv=particle.getVelocity()
       nowvx=nowv.getX()
       nowvz=nowv.getZ()
       rm=random.uniform(0,1)-0.5
       rm*=0.1
       newv=Vector.new(nowvx,rm,nowvz)
       particle.setVelocity(newv)
  elif  cf > 435:
     for particle in particles3:
       nowv=particle.getVelocity()
       nowvx=nowv.getX()
       nowvz=nowv.getZ()
       rm=random.uniform(0,1)-0.3
       newv=Vector.new(nowvx,rm,nowvz)
       particle.setVelocity(newv)

 

此 Python Script 非常簡單的控制 435 格前後的 Y 方向速度。

補充、 RealFlow 2013 ,可以直接拿發射器名稱當物件使用,以我的例子,直接寫 Circle01,然後調用 Emitter 的方法即可,不需要像之前必須先寫 getEmitter(“Circle01”)

You Might Also Like

Leave a Reply

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料