如何在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也是这样的。