0

我一直在尝试创建一个脚本修饰符。一切正常。唯一的事情是我想在修改器中显示对象的当前 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)
    )
)

提前致谢, 视频

4

3 回答 3

1

修改器并不真正了解基础对象在世界中的位置。

从信息流的角度来考虑:

对象->修改器->世界

您不会收到有关世界的信息(您的 Z 位置,与对象相同,不会收到有关修改器的信息。

通常,如果您发现自己需要与流程不符的信息,那么您就有了一个可以以更好的方式解决的设计问题。通常这是通过实现世界空间修改器,但不幸的是我认为这在 MaxScript 中是不可能的。

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

theNode = refs.dependentNodes yourModifier firstOnly:on

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

于 2014-08-01T16:26:20.340 回答
0

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

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

于 2014-10-31T01:58:29.147 回答
0

“Scripted Modifier plugins can only extend existing Modifier plugins.” 请看文档,这可能是它的原因,$.pos 通常没问题。

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

于 2016-09-14T16:31:29.483 回答