开发公约
# 3dsMax 开发者公约
提示
这只是个人简单的开发声明和平时制作脚本工具时的一些细节,只是想在对 max 文件做出某些数据修改时尽量能避免和其他开发者的数据发生冲突。
如果你是新人,建议和我一起来,在行业保持一致的默契规则,方便他人也是方便自己。
如果你是老人,请教教我!!!
# GUID - AppData : -81259732468513268
id_ranges = -81259732468513268
id_path = -9125973246851326
getAppData rootnode id_ranges
2
3
4
5
如上,场景 rootnode
上 有两个,被书签插件占用,保存有动画片段。
# GUID - AppData : 777, 77
777
, 77
这两个数被 save&loadSelectionSets.mse
这个选择集合并插件所使用。
分别是 选择集名称,时间轴信息。
fn AMSS_savenamedsel =
(
for obj in objects do
(
setAppData obj 777 ""
setAppData obj 77 (animationRange.start as string +"|" +animationRange.end as string)
id = getAppData obj 1001
if id == undefined do (
id = genGUID()
setAppData obj 1001 id
)
)
try
(
if getNumNamedselsets() != 0 then
(
for i in 1 to getNumNamedselsets() do
(
a = #()
NamedSelectionSetManager.GetNamedSelSetList &a i
b = makeUniqueArray a
if b.count == 1 and b[1] == undefined do
(
Continue
)
for j in 1 to (getNamedselsetItemcount i) do
(
obj = getNamedselsetItem i j
if isValidNode obj do (
temp_ = getAppData obj 777
if temp_ != undefined or temp_.count > 0 do (
selSetString = temp_ + getNamedselsetName i + "|"
try (setAppData obj 777 selSetString) catch ()
)
)
)
)
)
)catch ()
)
callbacks.addscript #filepresave "AMSS_savenamedsel()" id:#savens
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
如上代码,该脚本在每次保存文件时,都将将 【选择集信息】 【时间轴信息】【GUID】保存到物体上。
# GUID - AppData : 1001
3dsMax 中并没有直接给 物体 object 分配 GUID ,但是 很多情况下我们需要一个全局唯一又是可以被保存的 ID 来识别标记 object 。
这里推荐使用 AppData
的 1001
数据通道保存GUID。
fn set_node_guid node_obj =
(
id = getAppData node_obj 1001
if id == undefined do (id = genGUID())
setAppData node_obj 1001 id
id
)
fn AMSS_GenGUID n =
(
if isValidNode n do
(
id = getAppData n 1001
if id == undefined do (
id = genGUID()
setAppData n 1001 id
)
)
)
callbacks.removescripts id:#saveguid
callbacks.addscript #nodeCreated "AMSS_GenGUID (callbacks.notificationParam())" id:#saveguid
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
目前 1001
这个数据通到只有 天晴动作工具组 里的 骨骼镜像工具 用到,用来标记骨骼的配对的镜像骨骼。该工具 目前占用 1001, 1002, 1003
三个数据通道, 而其的历史版本有用到数据通道 100
保存镜像数据。
# Name - AppData : 5
相信很多人都有使用过 getNodebyName ,按名字查对物体的 这个函数,个人是十分不建议大量使用该函数,因为物体名字有被改的风险。
但是又有些情况下,我们不得不使用该函数,比如从外部导入 数据,只有一个物体名字特征, 而数据来源的格式我们也无法控制。
当后期在次更新数据时,也只能硬头皮按名字查找物体,但是又不想出现物体被改名,重名而无法正确查找的情况。
这里推荐使用 AppData
的数据通道 5
来保存 Name 名字。
# render hidden - AppData : 813
渣渣渲屏,在隐藏无需渲染物体时 标记,用于事后恢复状态.