Houdini hda参数label设置中英文切换

需求

在开发hda工具的时候,我们有时候会考虑到不同语言的用户使用,目前houdini官方只有英文版本,我们可以在自定义工具的时候是设置中文标签,但是这个标签不能直接填入表达式,那么我们是否可以对这个标签通过python进行一个动态的变化?在经过测试之后,发现是可行的。

图片[1]-Houdini hda参数label设置中英文切换-数字折叠

实现方法

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.如果你有其他的好办法,欢迎交流。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容