【Maxscript入门】学习笔记整理一

一、基础常见语法

学习参考链接一MAX脚本翻译教学 - 蓝天中飞翔 - 博客园 (cnblogs.com)

前言:常用类型

  • 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)

  • 提示:注意一下各个变量的写法和格式

1.美圆符号 $

$ 的意思表示我们当前所选择的物体

$还有另一个类似的用法:在它后面接物体的名称,比如输入 $Box01,就等于告诉MAXScript说我们要对名为Box01的物体进行操作。属性修改方法同样适用(比如 $box01.height)。

要查看查看所选物体的属性,用这样格式的命令$.属性,比如 $.radius 和 $.height 分别表示查看半径和高度。

只输入属性名称,那Listener只会告诉你该属性的数值。而如果想要修改它为一个新值,则使用 $.属性=数值 的格式,如$.length = 12.5。

提示:对于Listener中的命令,输入后最好用小键盘的回车,因为小回车会命令MAXScript立即执行该行代码,而大回车在某些情况下会等待输入更多条件语句。

2.“Show” 命令

show可以在MAXScript Listener中显示一个物体的属性名称列表

显示形式:.属性名:数值类型

例如选择一个box之后输入 show $,就可以看到Listener返回了这样的信息:

 .height : float
 .length : float
 .lengthsegs : integer
 .width : float
 .widthsegs : integer
 .mapCoords : boolean
 .heightsegs : integer

false

当一个物体的属性中还有次级属性的时候,我们也可以通过show命令来查看次级属性的清单.例如要查看一个box的材质,就可以输入 show $Box01.material,更深一级以此类推。

提示:并非物体的全部属性都会按show的命令显示出来,所有物体以及特定类型的物体所共有的属性如 name, material,和renderable等等,都不会在这里显示出来。同时,物体被附加的修改器、材质等等的属性也不会显示。

3."move," "rotate," "scale," 和 "in coordsys"(移动、旋转、缩放、坐标系)

move $Box01 [10,0,0]

相对位移:将Box01沿X轴向移动10个单位。

$Box01.position = [10,0,0]

绝对位移:将这个Box放在世界坐标的10,0,0位置上。

rotate $Box01 (eulerAngles 90 90 0)

相对旋转:将物体沿X和Y轴各旋转90度。

使用的是eulerAngles旋转值输入法;即X旋转和Y旋转再加上个Z旋转。

scale $Box01 [.5,.5,.5]

其中的.5就是0.5,在大多数电脑数字输入中,如果小数点前为0都可以省略,直接写点接小数。

4.用"for"循环实现自动化

for i in selection do (i.wirecolor = color 0 128 0)

for 某些变量 in 被操作物体清单 do 要做的事情

selection:"当前所选物体集合";设置物体的属性为一个指定数值,在这里所做的是把物体的“网格色”(即默认无材质状态下的显示颜色)设置为绿色。

for i in $*Omni* do (i.multiplier = i.multiplier*0.5)

上面的脚本会将名称中带有Omni字样的所有灯光亮度减半。

or i in selection do i.material = $Box01.material

这一行则是将所选择的所有物体赋予和Box01相同的材质。

for i in geometry do (i.motionblur = #image; i.motionBlurOn = ture)

这相当与将场景中全部的几何体打开运动模糊并将其模式设置为image方式。

我们也可以在do 的后面将多个命令放在一起使用,只要在它们外面加上括号,命令之间用分号隔开就可以了

5.“where”与“classOf”

在一个for循环中,where 为我们提供了一个过滤开关,它可以在循环运行中的每一次操作之前对物体属性是否“合格”进行判断。如果判断为“是”,则进行指定的操作,否则就将该对象忽略掉。

for i in selection where (false) do 操作

  false即“假”,因此忽略操作该物体,而当下列情况时:

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 = false

 ↑将所有未赋予材质的几何体取消隐藏状态


for i in shapes where (i.baseobject.renderable == ture) do i.name = "RS_" + i.name

 ↑将所有可渲染样条曲线的名称前加上“RS_”前缀(以便于按名称选择)

样条曲线Spline物体的 renderable 属性要使用 object.baseobject.renderable 进行访问和修改。

classOf $Box01

用来查询类别名。

在使用classOf 修理我们的灯光脚本之前,还有一件事得注意。如果,我们的box被加上了一个修改器,比如Bend弯曲,那么:

返回值就成了 Editable_mesh而不是Box了。因为默认情况下所查询到的是物体当前的状态,而不是它的原始类别(除非我们将修改器关闭)。如果需要忽略修改结果查询物体的原始类别,这样做:

classOf $Box01.baseobject

此时(相当于查询物体所具有的baseobject属性)MAXScript就会着眼于修改堆栈的最底端的物体状态返回所需的值了。

二、maxscript和VSCode的环境配置

视频教程:【教程】Maxscript系列教程 (一 )max使用VScode编译环境安装_哔哩哔哩_bilibili

文字教程:VsCode配置MaxScript开发环境 | 提瑞法斯议会 (supervj.top)

三、Maxscript中面板中的各个按钮介绍

参考视频:【教程】Maxscript系列教程 (四)UI绘制、函数及事件注册_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值