1

是否有任何可用的回调函数,当我们使用 slate 材质编辑器将纹理贴图附加到材质时触发。

原因:
我有一个自定义材质,如果用户没有有效的许可证,我不希望他将任何纹理附加到自定义材质上。在 Compact 材质编辑器中,我通过禁用 UI 来创建贴图来实现这一点。但是当我使用 Slate 材质编辑器时,我可以将纹理连接到我的材质。

所以我的想法是,当我尝试附加地图时,如果我从 slate 材质编辑器获得回调函数,我可以执行许可证检查并阻止他创建连接。我做得对还是你们有任何替代建议。

谢谢,
萨尼什

4

2 回答 2

0

我不建议对您的场景进行连续回调(即,在通过正常场景交互触发的事件上)。它确实在性能方面付出了代价,没有提供额外的安全性,而且您会对这可能导致其他系统组件的问题数量感到惊讶。中断另一个组件的操作并改变预期的结果肯定是不利的。如果 max 的另一部分正在设置纹理,并且不检查操作是否失败,则可能会导致崩溃。

一个建议是将您的验证移至 OnSave。

预保存,检查许可证。如果未找到许可证,请将您的纹理设置为“未定义”(当然带有适当的警告消息)。这意味着您不会在每个与材料相关的用户操作中不断地进出 maxscript,您只需维护一个入口点,最重要的是,如果它没有许可证,它可以让用户试用您的插件。它确实有一个缺点,即未许可用户无法重新保存从许可用户共享给未许可用户的场景,但除非您使用 C++,否则您的选择会受到一定限制。

但是,我不会在基于 maxscript 的安全性上投入太多时间或信念。MxS 本质上是可由用户编辑的,即使没有源代码,也不会花很长时间找到您的安全性并将其禁用。

于 2014-05-14T13:47:45.127 回答
0

maxscript 手册在这里有很多关于它的信息:

http://docs.autodesk.com/3DSMAX/16/ENU/MAXScript-Help/files/GUID-7C91D285-5683-4606-9F7C-B8D3A7CA508B.htm

向下滚动到名为:

Node Material Callbacks:

你有以下内容:

materialOtherEvent: 

只要节点的材质发生更改,就会调用提供的函数。

尝试使用它来捕捉您的事件,并根据您的许可证状态应用您需要的结果。

于 2014-05-14T07:48:38.137 回答