写在前面
阅读本文,你几乎不会有什么收获
主要是MaxScript语法基础、工具、Max的fx shader
换电脑了,10700F果然比6300HQ编译快亿点
UE4的Slate真难用,幸亏有DetailsView,不然做Plugin都tm裂开
一、基础语法
写的很粗,主要了解一下怎么写
1. 数据类型
1.1 操作符
<value> == <value>
<value> != <value>
<value> as <class> //将数据转换为特定类型
1.2 方法
打印:
print<value>
format<format_string>{
<value>}[to:<stream>]
format "name:% pos:%" obj.name obj.pos
判断
classOf<value>
superClassOf<value>
isKindOf<value><class>
issTructDef<value> //value是结构定义,返回true
isStruct<value> //是结构类的数据,返回true
isController<value> //是控制器,返回true
getHashValue<value><Integer oldHashValue> //如果是合法的数据类型,返回整型Hash,如果是非法,返回undefined
1.3 基本数据类型
- Number
- Float
- Integer
- String
- Name (主要用于从函数参数传递中选中指定的一种)
- Boolean (True、False 或 On、Off,操作符 单目not,双目and、or)
- Color
Color <r> <g> <b> [<a>] <point3> as Color
- Point3
Point3 <x> <y> <z> <color> as Point3
- Point2
- Quat (方向的压缩形式,提供了操作四元代数的方法)
quat <x> <y> <z> <w>
- AngleAxis (方向的表示方法,同上)
- EulerAngles (方向的表示方法)
- Matrix3 (4x3转换矩阵)
matrix3<point3><point3><point3><point3>
- Box2 (定义一个二维矩阵区域)
Box2 <x> <y> <w> <h> ```
- BitArray (用于存储选择简捷)
- Time
- Interval (用于代表一个时间段)
Interval <start.time> <end.time>
- Bitmap (提供对位图的存取)
- Stream (用来格式化和保存字符类数据)
- FileStream (文件数据流,用来在MAXScript 里对文本文件进行 I/O 操作)
- StringStream (用于操作很长的String值)
- WindowStream (运行用向一个Script Editor窗口输出字符)
1.4 特殊数据类型
- undefined (所有没有初始化的变量和数组成员都是这个类型)
- OK (用于没有确定意义返回值的函数和表达式的返回值。。FReply?)
- unsupplied (用来判断函数调用时,形参有没有被赋值)
if var == unsupplied then var = 0
- DontCollect (用于For循环中表明那些值不被收集)
1.5 高级数据类型
- Structure
struct <struct_name>(<member> { ,<member>})
- MaxKey (代表某个控制器的一个关键帧)
- NoteTrack (用于在脚本插件里给MAXWrapper对象添加一些用户定制信息)
- Collection (集合类数据,可以用来为集合内的元素调用一次函数)
1.6 集合类数据类型
- Array
#(<value>, <value>...) #()
- PathName (用来指定对象的层级结构)
- ObjectSet
- SelectionSet (选择集,工具栏里 Name Selection Set)
- SelectionSetArray
- NodeChildrenArray (场景中节点的直接子对象们,用于遍历)
- VertexSelection (Mesh的顶点选择集)
- FaceSelection
- EdgeSelection
- MaxKeyArray (关键帧数组)
- ModifierArray (修改器数组)
- MaterialLibrary (材质库)
- ArrayParameter (数组参数类)
淦哦,Max为啥不Array<Class>
2. 变量和表达式
2.1 变量赋值
<destination> = <expr>
Swap <destination1> <destination2>
2.2 变量的作用域
global a
local b
2.3 持续型全局变量
与场景一同储存,打开场景后就会恢复
persistent global a
2.4 MaxScript变量的特性
- 类型自由
x = "foo" x = 2
- 变量内存空间分配
heapSize += 2000000 // +2MB
- 手动内存回收
gc()
2.5 块表达式
最后一个表达式求值的结果作为表达式的返回值
Float a =
(
b = 1 + 1
)
2.6 关联表达式
关联表达式可以让用户在用户界面中一样创建动画和操作3ds max对象
- animate (关键帧)
- at level、in (找到场景中的节点对象)
- at time (对应用户界面的时间滑标)
- coordsys (对应工具栏Reference Coordinate System)
- about (对应主工具栏 Rotate | Scale Transform Center)
- undo (控制脚本里对场景的改变是否可以取消)
3. 程序控制流程
3.1 if
if <expr1> then <expr2> [else <expr3>]
if <expr1></