【问题标题】:Maxscript Scripted ModifierMaxscript 脚本修改器
【发布时间】:2014-09-23 08:26:50
【问题描述】:

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

提前致谢, 视频

【问题讨论】:

    标签: 3dsmax maxscript


    【解决方案1】:

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

    从信息流的角度来考虑:

    对象->修改器->世界

    您不会收到有关世界的信息(您的 Z 位置,就像对象不会收到有关修改器的信息一样。

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

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

    theNode = refs.dependentNodes yourModifier firstOnly:on

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        “脚本修改器插件只能扩展现有的修改器插件。” 请参阅文档,这可能是它的原因,并且 $.pos 通常可以。

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

        【讨论】:

          猜你喜欢
          • 2017-10-04
          • 2012-09-25
          • 2020-01-20
          • 2017-11-12
          • 2015-11-22
          • 1970-01-01
          • 1970-01-01
          • 2017-12-23
          • 2010-09-24
          相关资源
          最近更新 更多