Maxscript脚本修饰符

时间:2014-07-31 11:45:33

标签: 3dsmax maxscript

我一直在尝试创建一个脚本修饰符。一切正常。唯一的事情是我想在修饰符中显示对象的当前Z位置。这将要求我每次更新对象时更新修改器。有人可以指导我如何更新基础对象移动的修饰符吗?

示例代码:

plugin modifier accessBaseObject
name:"Access Details" classID:#(0x260e697e, 0x64b63822) replaceUI:true version:1
(
    parameters main rollout:params
    (
        enterValue type:#float animatable:true ui:spnEnterValue default:0.0
        on spnEnterValue set val do (print $.name)
    )
    rollout params "Modifier Parameters"
    (
        spinner spnEnterValue "Enter Value : "
    )

    on update do
    (
        print ($CAMERA.pos.Z)
    )
)

提前致谢, Videep

3 个答案:

答案 0 :(得分:1)

修饰符并不真正了解世界中的基础对象位置。

从信息流的角度考虑:

对象 - > Modifier->世界

您没有收到有关世界的信息(您的Z位置,与对象没有收到有关修饰符的信息相同。

通常,如果您发现自己需要与流程相悖的信息,那么您可以更好地解决设计问题。通常可以通过实现世界空间修改器来实现,但遗憾的是我并不认为在MaxScript中可以实现这一点。

要解决此问题,您可以找到您的节点并直接访问它。

theNode = refs.dependentNodes yourModifier firstOnly:on

但是当节点移动时,这不会更新,并且不会处理实例化。我考虑重构你的插件以使用不同的类 - 尝试脚本控制器,或者创建一个依赖于输入对象的脚本对象。

答案 1 :(得分:0)

Frozen Wiki几乎总结了它。自定义属性通常可以解决这类问题。您可以存储弱引用,并随意处理它们。有关更多信息,请查看Paul Neale的网站:http://www.paulneale.com/

对于脚本控制器:http://www.paulneale.com/tutorials/Scripting/weakReferences/weakReferences.htm

答案 2 :(得分:0)

"脚本修饰符插件只能扩展现有的Modifier插件。 " 请查看文档,这可能是它的原因,$ .pos通常可以。

但是,如果您通过其他脚本动画移动相机,您仍然可以通过更改某些值强制更新,并在某些值更改时调用插件中的函数。