CloseMaxScript6 资源文件
资源是指主插件用到的图片、额外的dll文件等
通过资源打包将他们归纳到单个文件
这不会加密你的文件,释放后的效果与你手动拷贝到目标目录的方式没有区别
单个文件可以便于用户使用和打包发布
但需要注意的是单个文件太大也会影响启动速度
打包时指定资源文件
--filePath --文件路径 --releaseName:"" --释放后的新文件名,默认使用输入文件名 --compress:false --是否开启压缩(文件太小可能导致压缩后尺寸更大) --writeToLocal:true --是否写入本地 config.AddResourcesFile @"C:\Users\trykle\Desktop\file1.dll" config.AddResourcesFile @"C:\Users\trykle\Desktop\file2.dll" releaseName:"new_file_name.dll" compress:true --在6.12版本及以后,允许嵌套一层文件夹 config.AddResourcesFile @"C:\Users\trykle\Desktop\file2.dll" releaseName:@"mytest\new_file_name.dll"
文件将以字符串编码形式保存在打包的ms文件中
文件释放机制
文件释放时机是在前置动作之前
如果检查到有存在文件名,则不会进行释放(打包时config.ClearResources=false时),你需要自行控制文件的版本
这个操作和你手动复制文件到指定位置没有差异
释放前清理
将在释放前,尝试删除同名文件
如果你的资源不经常变化,则可以考虑不必清理,在有新版本的资源文件时直接改名
config.ClearResources = true
如果你发现依然是之前的资源文件,你应该:
- 检查打包后的文件和释放位置,尝试手动删除他们,排除文件锁定的情况
- 检查源代码中资源文件的引用名字
- 重启3dmax
文件释放位置
使用maxscript访问
-- C:\Users\%USERNAME%\AppData\Local\cmxsres resDir = (dotNetClass "System.Environment").GetFolderPath((dotNetClass "System.Environment+SpecialFolder").LocalApplicationData) + @"\cmxsres\" --上面的太长了,或者这样 resDir = @"C:\Users\" + sysInfo.username + @"\AppData\Local\cmxsres\"
关于卸载
释放目录看起来像是一个垃圾站
如果你的插件包含了卸载逻辑,请在卸载时也删除这些文件
为避免不同插件之间的出现删除错误的冲突情况,请将你的资源文件名字特殊处理,最大程序确保名字不与别人重复
resDir = (dotNetClass "System.Environment").GetFolderPath((dotNetClass "System.Environment+SpecialFolder").LocalApplicationData) + @"\cmxsres\" deleteFile (resDir + "myfile.png")
从内存中获取
- 在打包时可将
writeToLocal
设置为false,这样不会写文件到磁盘 - 可以指定
releaseName
来修改获取的key
product = Cmxs6Container.MxsRuntime.Call "LastTool" bytes = product.Call "GetResources" @"your.dll"
可以用此方法把dll封装mse中,dll as mse
让filein 即为导入dll
filein "xxx.mse"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2020-11-06 Maxscript Renturn