学习笔记MAX_SCRIPT_01
学习笔记 MAX_SCRIPT_01
关于max script的脚本编辑一直想系统的学习一下,在网络上找到zihahage 的学习笔记,非常感谢,学习并记录了自己的学习历程
首先需要掌握的一些词汇:
- $
- show
- move
- rotate(eulerAngles x y z)
- scale
- in coordsys
- for
- where
- classOf
- random
- #() 和 []
- at time
$
$ 的意思表示我们当前所选择的物体
修改一个圆的大小:$.radius = 6;
修改圆的相对大小:$.radius += 6; // 用 += , -= , *= 和 /= 来表示在当前值之上进行加减乘除
可以控制物件名的相关属性
修改一个名字为“Sphere01”圆的大小:$Sphere01.radius = 6;
注意:如果物体名称中存在空格,要在名称两端加上单引号,例如 $'my box'
show
显示物体下面的属性名称
show $ //查看当前物体的属性名称
.height : float //冒号左边的单词是属性名,冒号右边的词指出该属性所需的数值类型
常用数值类型的名称含义
integer:整数
float:浮点数(即允许带小数)
string:字符串,数值外要带有双括号,例如 "hello world"
boolean:真\假 值,也用来表示打开和关闭,可以使用 true,false,on,off
point2:二维坐标,两个数字之间用逗号分隔,外加方括号,例如 [10,20]
point3:三维坐标,三个数字之间用逗号分割,外加方括号,例如 [10,22,133]
color:颜色RGB数值,在圆括号以 color开头,加三组数值分别表示RGB值,以空格分隔,例如纯白色为 (color 255 255 255)
查找物体的次级属性列表
show $.material
注意:必须指出的是并非物体的全部属性都会按show的命令显示出来,事实上为了使“搜索结果”清晰明了,所有物体以及特定类型的物体所共有的属性如 name, material,和renderable等等,都不会在这里显示出来。同时,物体被附加的修改器、材质等等的属性也不会显示。如果需要一份绝对完整详尽的属性列表,可以去MAXScript参考手册中的"General Node Properties"章节(埋藏很深,最好使用帮助系统的“索引”功能)此外还有Properties, Methods, Operators, and Literals 条目记载着关于物体类型的信息
实战应用举例:
$Box01.height = $Box02.height // 将Box01的高度设置为与Box02相同
$Box01.height = $Box01.length = $Box01.width = 10 //把Box01设置为边长为10的正方体
$Sphere01.radius = $Box01.height/2 //将Sphere01的半径设置为Box01高度的一半
$Box*.height = 10 //把场景中所有名称以Box开头的物体的高度值设置为10
$Omni*.multiplier /= 2 //把名称以Omni开头的所有灯光的亮度设置为原来的一半
$Box*.material = $Sphere01.material //把Sphere01的材质赋予所有名称以Box开头的物体
注意:
$Spot*.on = false //把名称以Spot开头的灯光关闭(这个例子的脚本不会正常运行,原因稍后详细解释,这里只是为了使你了解MAXScript可以自动操作这类任务)
move, rotate,scale,in coordsys
移动$Box01.position = [10,0,0] //Box放在世界坐标的10,0,0位置上
旋转
rotate $Box01 (eulerAngles 90 90 0) //将物体沿X和Y轴各旋转90度。(注意这里也是相对旋转)
缩放
scale $Box01 [.5,.5,.5] //需要注意的是100%的缩放值是用1来表示的,因此假如做一个50%的均匀缩放
坐标系
现在物体的各种运动方式的做法我们都知道了,默认情况下它们都使用世界坐标系。如果想要使用局部坐标、上层物体坐标等其他坐标系统,就需要在我们的运动命令前面冠以 in coordSys 某坐标系,例如将前面第一个移动物体的例子改为:
in coordSys local move $Box01 [10,0,0] //这样就是把Box01在局部坐标Local上移动了10个单位了
where
在一个for循环中,where 为我们提供了一个过滤开关,它可以在循环运行中的每一次操作之前对物体属性是否“合格”进行判断。如果判断为“是”,则进行指定的操作,否则就将该对象忽略掉。
for i in selection where (false) do
for i in selection where (true) do
实战举例:
for i in $Box* where (i.height > 10) do i.height = 10
//找出名称以Box开头并且高度大于10的所有物体,将其高度设置为10
for i in $Box* where ((i.height > 9) and (i.height < 11)) do i.height = 10
//找出名称以Box开头并且高度在9和11之间的物体,将它们的高度设置为10
for i in geometry where (i.material == undefined) do i.isHidden = falseclassOf
类别名
classOf $Box01 // MAXScript返回值:Box
与show的最大不同在于它是可以用于表达式中做真假判断运算的:classOf $Box01 == Box