我一直在尝试创建一个脚本化的修饰符。一切正常。唯一要做的就是在修改器中显示对象的当前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
发布于 2014-08-02 00:26:20
修改器并不真正了解基础对象在世界中的位置。
从信息流的角度来考虑:
对象->修改器->世界
您不会收到有关世界的信息(您的Z位置,与对象不会收到有关修改器的信息相同。
通常,如果您发现自己需要的信息与流程背道而驰,那么您就有了一个可以用更好的方式解决的设计问题。一般来说,这是通过实现一个世界空间修饰符,但不幸的是,我不认为这在MaxScript中是可能的。
要解决这个问题,您可以找到您的节点并直接访问它。
theNode = refs.dependentNodes yourModifier firstOnly:on
但这不会在节点移动时更新,也不会处理实例化。我会考虑重构你的插件以使用不同的class - try脚本控制器,或者创建一个依赖于输入对象的脚本对象。
发布于 2014-10-31 09:58:29
Frozen很好地总结了这一点。对于这类事情,自定义属性通常会起到作用。您可以存储弱引用,并随心所欲地处理它们。欲了解更多信息,请访问保罗·尼尔的网站:http://www.paulneale.com/
对于脚本化控制器:http://www.paulneale.com/tutorials/Scripting/weakReferences/weakReferences.htm
发布于 2016-09-15 00:31:29
“脚本化修改器插件只能扩展现有修改器插件。”请看文档,这可能是它和$.pos通常正常的原因。
然而,如果你的相机被其他脚本动画移动,你仍然可以通过改变一些值来强制更新,并且在一些值改变时,在你的插件中调用你的函数。
https://stackoverflow.com/questions/25058118
复制相似问题