Maxscript学习记录

学习路径

创建和修改:

box()    --创建原始模型带有括号是默认参数

mybox=box()  

mybox.name="傻derbox"--mybox后跟一个英文句号是访问后面跟的函数。这是更改box名称

 mybox = box length:20 width:20 height:20--box之后不带括号就需要手动指定参数

mybox.wirecolor = (color 255 0 255)--这是更改box顶点颜色,更改颜色=后面需要括号

mybox.pos = [x,y,z] --这是修改box位置,注意这是绝对位置。=后跟中括号

mybox.scale = [x,y,z]--这是缩放,=后跟中括号、

move mybox [x,y,z]--这是相对坐标移动

scale mybox [x,y,z]--这是相对坐标缩放,其中任意参数为0模型则会被压缩

rotate mybox(eulerangles x y z)--旋转,单位为度。欧拉角旋转写法

rotate mybox(quat 旋转角度 [x,y,z])--旋转。四元数写法,quat后面的数字是旋转角度,中括号             xyz的数字只能是0或1,1则为那个轴向的旋转

rotate mybox(angleaxis  旋转角度 [x,y,z])--旋转。角轴写法,quat后面的数字是旋转角度,                     中括号xyz的数字只能是0或1,1则为那个轴向的旋转

添加修改器:
addModifier mybox(修改器名称      ()    )--这是用来添加修改器面板里的修改器的写法

resetMaxFile #noprompt--重置max场景,#noprompt这是不提醒,重置不提醒

if条件判断:

if mybox.height == 10 then mybox.width = 20--if后面的是条件,then是执行修改,当条件复                   符合则执行,当条件不符合则不执行

if mybox.height == 10 then mybox.width = 20 else mybox.width = 10--符合条件则执行第一个                 执 行 命令(then),当条件不符合则执行第二个命令(else),注意可以换行

比较运算符

== 等于 

!= 不等于

>大于

>= 大于或等于

<小于       

<= 小于或等于

For循环:


resetMaxFile #noprompt--重置场景且不提示,可有可无
mybox = box()--创建盒子,这里可以指定大小及颜色

for  i = 1 to 5 do --for循环,i是变量,1 to 5 do是附加值,
(
box_copy = copy mybox --这里是复制盒子,从1到5
box_copy.pos = [i*30, 0, 0] --这里是给5个盒子分别指定x轴向的绝对坐标
box_copy.wirecolor = [i*10,i*10,i*10] --这里是R G B,每个盒子分别逐步递进给予颜色
)--括号中的就是循环所需要执行的命令

--需要注意的是,循环物体得有物体才行,所以需要新创建一个物体才能循环

resetMaxFile #noprompt 
mybox = box length:10 width:10 height:10 wirecolor:blue 
for i = 1 to 5 by 2 do--这里多了by 2 do是指隔一个创建一个,隔一个给一个坐标,隔一个给一个颜色
(
box_copy = copy mybox 
box_copy.pos = [i*20, 0, 0] 
box_copy.wirecolor = [i*25,i*50,(5-i)*50] 
)

数组获取:

arr=for i=1 to  5 collect i--collecti是聚集,collecti后的i则是for循环后赋值的变量i

print i--这里是打印。打印不要写等于号

arr=#(11,22,33)

for i= 1 to arr.count do print arr[i]--count是数量,这里类似选中的对象数量,元素的点数量,或者面数量,后面arr[i]当中的i就是逐帧打印和数组一样,i也可以是指定的数字例如arr[ random 1 8]

--这里的意思是1循环到选中所有。随机1到8

while和do条件判断:

while 条件 do 执行 -- 这里是先判断再执行,条件复合则会一直执行,直至undefined,未定义
x=10   while x>10 do print (x-=1)--x-=1这里是缩写,x=x-1。等号左边的x只是一个代称
结果undefined

do 执行 while 条件 --先执行后判断,条件至少都会被执行一次,

x=10    do print (x-=1) while x>10  结果 9 undefined

全局变量和局部变量:

全局变量--
global rad = 10  --global全局变量
sphere radius:rad--创建一个球体,radius半径为,全局变量rad的10
局部变量--只是一个概念,它通常是在函数中起作用,部分局部变量无法独自存在,需要其访问全局或是其他别来才能执行代码
for i = 1 to 3 do
(
  local rad = 10  --local局部变量,局部变量只能在块(函数)当中访问
  s = sphere()
  s.pos.x = i * 10
  s.radius = rad
)
for i = 1 to 5 do
(
  global rad = 10
  cyl_height = 25
  c = cylinder()
  c.radius = rad
  c.height = cyl_height
  c.pos.x = i * 25
)
s = sphere radius:rad

表达方式:

单个展卷栏表达方式:

try DestroyDialog a catch()--这里是防多开插件

rollout a "展卷栏"--字母a是代码识别的命名,  "  "  中的名称是用来给人识别的
(
button anniu "按钮" height:20 width:80 pos:[20,20]   tooltip:"鼠标悬停提示"
on anniu pressed do
(messagebox "信息提示弹窗" title:"弹窗标题" )
)         
createdialog a  180 250--这是创建可视化窗口,两组数字是控制面板长宽

多个展卷栏表达方式:

global ZJL

rollout A "第一个展卷栏" 

)
------------------------------------------------------------------
rollout B "第二个展卷栏"
(
)
-------------------------------------------------------------------
rollout C "第三个展卷栏"
(
)
--------------------------------------------------------------------


ZJL=newRolloutFloater "多展卷栏" 150 210--这里的两组数字用来控制面板大小


addRollout A ZJL rolledUp:false--这里的rolledUp:false用来控制打开插件时展开or关闭状态
addRollout B ZJL rolledUp:true
addrollout C ZJL rolledUp:true

--这里的三组addRollout ABC对应的是上方三个展卷栏

按钮等功能(陆续更新)

说明:直接复制代码好像会报错无法运行,目前找到的解决办法是删除缩进和多余的空格(比如括号前的空格这些等)

try DestroyDialog a catch()--这里是防多开插件

rollout a "展卷栏"--字母a是代码识别的命名,  "  "  中的名称是用来给人识别的
(
group "包裹框" (--把以下面板内容包裹起来,好看些
    button AN "按钮" height:20 width:80 pos:[20,20] tooltip:"提示内容"--height高度,width宽度,pos位置,tooltip鼠标悬浮按钮上显示的提示内容
    spinner WTQ "微调器" fieldwidth:30 pos:[20,45] range:[0,100,25]--fieldwidth宽度,pos位置,range:最小值-最大值-显示值
    label  WB "文本" width:30 height:30 pos:[45,60]--仅显示文字信息
    checkbox FXK "复选框" width:70 height:20 pos:[20,75] checked:true tooltip:"提示内容"--checked表示复选框是勾选状态还是关闭状态。true or false
    

    )
)
createdialog a  120 400 --这是创建可视化窗口,两组数字是控制面板长宽

创建工具栏(自定义脚本):

这是将自己的脚本保存至工具栏中(就不用每次都从文件夹中拖到max中了)

注意事项:

1、脚本需要放在max安装目录下的scripts文件中

2、仅支持ms,mse格式

自定义-自定义用户界面-工具栏-新建-新建工具栏(命名)-打开脚本编辑器(复制以下代码)-全选代码拖动至新建工具栏的图标上即可

filein "$scripts\文件名称.ms"

插件调用:

rollout a "展卷栏"
(     

button AN "脚本名称"   --这是脚本按钮

on AN pressed do
    (filein "脚本保存路径\\脚本名称.mse"--仅ms,mse可以使用
        )

)

createdialog a 180  250

添加浮动面板:

try DestroyDialog a catch()--防多开再浮动面板下无效

rollout a "展卷栏"--字母a是代码识别的命名,  "  "  中的名称是用来给人识别的
(

)         
createdialog a  180 250--这是创建可视化窗口,两组数字是控制面板长宽

cui.RegisterDialogBar a style:#(#cui_dock_left ,#cui_dock_top ,#cui_dock_right ,#cui_dock_bottom )--这是创建浮动面板(括号中的是可以停靠方向,上下左右)

cui.dockdialogbar a #cui_dock_right--这是打开脚本固定停靠位置,#靠右

注释

--               单行注释

 /*     */       长注释

注意事项:
 

写入代码必须使用英文符号——很重要!

(x-=1)--x-=1这里是缩写,x=x-1

selection表示选中的所有物体,如果是对场景中的全部物体(包括不被选中的物体)进行调整只要将selection改成objects

很棒的教程或资料:

自定义函数库参考

[maxscript教程] 函数库-原创脚本工具-TA技术美术,微元素 - MaxScript,MAX脚本 - Element3ds.com!icon-default.png?t=N7T8https://www.element3ds.com/thread-166409-1-1.html

m解剖一只MZP - 简书 (jianshu.com)icon-default.png?t=N7T8https://www.jianshu.com/p/9fc5dab3fc88

脚本打包制作插件 AutoMZP Maker v1.0.1 for 3ds Max - 哔哩哔哩 (bilibili.com)icon-default.png?t=N7T8https://www.bilibili.com/read/cv26789740/

大佬们的学习笔记

最近在学习maxscript,记了一些笔记,分享给我的朋友们! - 墨白 - 博客园 (cnblogs.com)icon-default.png?t=N7T8https://www.cnblogs.com/jiajie886/archive/2011/07/27/2118413.html

MaxScript学习笔记 | 月光林地 (supervj.top)icon-default.png?t=N7T8https://supervj.top/2021/03/26/MaxScript/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值