脚本控制器与表达式控制器运行方式类似。这些版本提供了一个可在其中为计算控制器值输入脚本的“脚本控制器”对话框。
可以在 3ds Max 中使用以下“脚本”控制器:
不同类型的“脚本”控制器之间的区别主要在于您可以将其指定到的动画轨迹的类型不同。例如,将“变换脚本”控制器指定给“变换轨迹”;将“位置脚本”控制器指定给“位置”轨迹;如果“位置”控制器为“位置 XYZ”,则还可以将“浮点脚本”控制器指定给所有单独的“位置”轨迹(位置 X/Y/Z)。
脚本控制器的主要优点是:
有关该脚本语言的完整说明,请参考“MAXScript 帮助”。
“变换脚本”控制器在一个脚本化矩阵值中包含位置/旋转/缩放 (PRS) 控制器含有的所有信息。可以从一个脚本控制器对话框中同时访问全部三个值,而不是为位置、旋转和缩放控制器分配三个单独轨迹。因为脚本定义了变换值,因此更易于设置动画。
控制器脚本的值必须是 matrix3 值。matrix3 值是 4x3 3D 变换距阵。有关详细信息,请参见 MAXScript 帮助中的“Matrix3 值”主题。
3ds Max 将输入到“脚本”文本框中的文本解释为 MAXScript 块表达式的主体。您可以按照所需的行数键入很多表达式,并依次进行计算。最后一个表达式的值将作为控制器的值。该值会针对不同的控制器生成相应的类型:即为浮点控制器生成 float,为位置控制器生成 point3,为旋转控制器生成 quat,为变换控制器生成 matrix3 等。
由于文本在块表达式中,所以可以声明只在脚本中可见的并临时在评估中的局部变量。还可以声明或访问与 MAXScript 中的其他所有脚本共享的全局变量,并保留从一个计算到下一个计算的值。
控制器始终由 3ds Max 根据特定的动画时间来计算。如果正在播放动画或正在进行渲染,则这可能是当前时间滑块或增量帧时间。在脚本控制器中,所计算的时间用于围绕控制器脚本建立自动“时间”上下文,因此访问的任何属性(其他显式“时间”表达式除外)将为当前控制器计算时间生成正确的值。这意味着不必在脚本中进行任何特殊操作即可在正确的时间工作。可以用标准 MAXScript 变量 currentTime 访问计算时间。还可以通过在脚本中使用“时间”表达式(与在正则 MAXScript 编程中一样)引用其他时间的场景属性值。
当需要参考场景中的节点或动画轨迹时,建议您使用“脚本”控制器变量工具组创建变量,来指定给任何特定的节点或控制器轨迹。这样,如果您决定以后重命名场景对象,就保留了使用这些对象的脚本控制器,因为变量保持了到节点的链接。
否则,例如,您在对话框的“表达式”窗口中手动将节点指定给变量,则只要您重命名该特定节点,该链接就会断开。
示例:要在动画期间,保持对象相对于场景中的其他对象居中,请执行以下操作:
新变量自动添加到“变量”列表。
将打开“轨迹视图拾取”对话框,其中列出了场景的内容。
foo 节点便指定给您的变量。
local pos=[0,0,0]
for o in objects where o != foo do
pos += o.pos
pos / (objects.count - 1)
这个脚本可以通过以下方式计算除当前对象(在此写为 foo)之外所有对象的平均位置:对局部进行设置,对除了 foo 之外的所有对象反复演算,对总位置向量进行积累,对最后一行的平均值进行计算,这是该脚本的最后结果。
要使用变换脚本控制器,请执行以下操作:
“脚本控制器”对话框将打开。
自动指定“脚本”控制器能够打开可以输入脚本的“脚本控制器”对话框。要打开随后的对话框,可以右键单击“运动”面板上或者“轨迹视图”层次中的轨迹,选择“属性”,或者单击“轨迹视图”工具栏上的“属性”按钮。
列出控制器中的所有可用变量。在每个脚本控制器中都可以使用以下预定义的常量变量,但是不能将其删除或重命名。