需求
在开发hda工具的时候,我们有时候会考虑到不同语言的用户使用,目前houdini官方只有英文版本,我们可以在自定义工具的时候是设置中文标签,但是这个标签不能直接填入表达式,那么我们是否可以对这个标签通过python进行一个动态的变化?在经过测试之后,发现是可行的。
实现方法
1.我们首先在hda内部创建一个null节点,修改名字为python,在null节点上自定义一个string参数,name也为python,勾选multi-ine sting,Language为Python,保存。
2.在hda节点参数上,创建一个Ordered Menu参数name为Language,label可以设置为语言/Language。在Menu里面创建两个选项chinese 和 english。然后再callback Script输入以下代码
exec(hou.node("./python").parm("python").eval())
3.对于其他参数。你需要将他们的name 和中英文显示的参数都做一个json数据,例如:
"GlobalSettings": ["全局设置", "Global Settings"],
"bending": ["弯曲", "height"],
"shezhi_1": ["设置二", "setting two"],
"testt": ["第二参数", "second param"]
说明:第一个GlobalSettings为你hda参数的Name名字,这个一定要正确,要根据这个名字取定位要修改的参数,里面的第一项就是Language选择为chinese的时候要显示的label,第二项是选择为English时显示的lable。
4.回到hda里面创建的null(python)节点里,在里面输入以下代码
5.保存好回到hda参数里,尝试切换不同的Language查看显示效果。
功能升级
在实现了简单的语言切换之后,我们发现了一个问题,就是有一些参数是菜单类型的,比如选择某种运行模式。在当前的一级参数下,会有多个菜单标签,那么我们如果让这些参数标签也能随之切换呢。我们需要先将这些菜单写成一个json数据,例如
menu_data = {
"size": {
"s1": ["尺寸1", "size"],
"s2": ["尺寸2", "size"]
},
"type": {
"t1": ["类型1", "cube"],
"t2": ["类型2", "tube"],
"t3": ["类型3", "sphere"]
}
}
然后再去修改原始的python代码加上这个菜单的处理逻辑,一些是最终的代码:
说明
1.如果你在UE里面使用的话切换完语言之后需要点击一下hda的Rebuild参数。
2.现在是手动创建json数据,更完美的方式是通过一个脚本将hda上所有的参数name和label统计下来。
3.如果同时在houdini和ue中使用这个功能,可能会影响工具的稳定性,建议不要切换太频繁。
4.如果你有其他的好办法,欢迎交流。
暂无评论内容