我一直在尝试创建一个脚本修饰符。一切正常。唯一的事情是我想在修饰符中显示对象的当前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
答案 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通常可以。
但是,如果您通过其他脚本动画移动相机,您仍然可以通过更改某些值强制更新,并在某些值更改时调用插件中的函数。