如何在3dMax中实现创建对象时自动指定材质?
如何在3dMax中实现创建对象时自动指定材质?
我们在某些情况下是否希望为创建的对象指定默认材质呢?如果有这样的需求请不用担心,解决方案就在这里啦。它并不有多么复杂,但展示了如何使用NodeEventCallback在使用此回调系统的节点上执行操作。代码非常简单,不言自明,所以我不会详细介绍。
我们使用添加的回调,每次在场景中创建新对象时都会发生这种情况,我们用两个参数ev和nd传递要在回调中使用的函数,第一个是调用该函数的事件,第二个是AnimHandles的列表。
我们可以使用GetAnimByHandle nodeHandle来获取该句柄的节点对象,之后,我们就可以开始了!在这种情况下,我只是反复检查我们正在创建的节点是否为几何体,否则什么都不做!
出于观看的目的,我使用了completeRedraw(),我建议在重场景中不要使用它,或者根本不使用它。如果去掉它,唯一的区别是只有在视口中执行某些操作后才会重新绘制,但材质指定已经完成,不用担心🙂
我使用了两个与场景一起保存的持久变量,这样我们就可以避免每次创建对象、加载/重新加载场景时都有多个“默认”标准材质。
费话少说,还是直接上代码吧,您可以将其放在启动脚本文件夹中,也可以将其分配给宏。享受
(
if acMat == undefined then (
persistent global acColor = color 30 30 30
persistent global acMat = StandardMaterial()
acMat.diffuse = acColor
)
fn setStandardMaterial ev nd = (
local acObj = GetAnimByHandle nd[1]
if superclassof(acObj) == GeometryClass then (
acObj.material = acMat
acObj.wireColor = acColor
completeRedraw()
)
)
callbackItem = NodeEventCallback mouseUp:true added:setStandardMaterial
)
若要删除回调,在Macroscript编辑器中执行callbackItem=undefined就可以了,acMat和acColor也是这样的。