如何在3dMax中實現創建對象時自動指定材質?
我們在某些情況下是否希望為創建的對象指定默認材質呢?如果有這樣的需求請不用擔心,解決方案就在這里啦。它并不有多么復雜,但展示了如何使用NodeEventCallback在使用此回調系統的節點上執行操作。代碼非常簡單,不言自明,所以我不會詳細介紹。
我們使用添加的回調,每次在場景中創建新對象時都會發生這種情況,我們用兩個參數ev和nd傳遞要在回調中使用的函數,第一個是調用該函數的事件,第二個是AnimHandles的列表。
我們可以使用GetAnimByHandle nodeHandle來獲取該句柄的節點對象,之后,我們就可以開始了!在這種情況下,我只是反復檢查我們正在創建的節點是否為幾何體,否則什么都不做!
出于觀看的目的,我使用了completeRedraw(),我建議在重場景中不要使用它,或者根本不使用它。如果去掉它,唯一的區別是只有在視口中執行某些操作后才會重新繪制,但材質指定已經完成,不用擔心🙂
我使用了兩個與場景一起保存的持久變量,這樣我們就可以避免每次創建對象、加載/重新加載場景時都有多個“默認”標準材質。
費話少說,還是直接上代碼吧,您可以將其放在啟動腳本文件夾中,也可以將其分配給宏。享受
( if acMat == undefined then (persistent global acColor = color 30 30 30persistent global acMat = StandardMaterial()acMat.diffuse = acColor)fn setStandardMaterial ev nd = ( local acObj = GetAnimByHandle nd[1]if superclassof(acObj) == GeometryClass then (acObj.material = acMatacObj.wireColor = acColorcompleteRedraw()))callbackItem = NodeEventCallback mouseUp:true added:setStandardMaterial
)
若要刪除回調,在Macroscript編輯器中執行callbackItem=undefined就可以了,acMat和acColor也是這樣的。