Call Houdini Engine in Unity | Unity中调用Houdini Engine

在Unity中调用Houdini Engine是可以的,不过如果直接拖进场景,然后bake,其实不太好管理的。mesh叫啥不太好控制。但是如果用代码调用Houdini Engine,就可以进行一系列自动化操作,而且不用担心手动操作管理混乱的问题。

HDA可以直接拖进场景。拖进去以后有一个HoudiniParms的组件,组件里显示的就是HDA的面板。


实例化HDA组件

用代码调用的话可以这样:


HoudiniAssetUtility.instantiateAsset(hdapath);

其中,hdapath是hda的路径这就相当于把HDA拖进场景了。然后可以用GameObject.FindObjectOfType找到HoudiniParms类型的组件,命名为assetparm,我们之后修改参数也是改它。

有几种参数:字符串,float,int/bool,gameobject

参数对应HDA里的一个参数ID,但是参数ID是多少一般看不出来,需要断点跟踪这个assetparm来看。找到参数id以后就好办了。

Mesh参数

如果是mesh(需要gameobject带meshfilter组件),下面这个40就是参数id

String参数

如果是string,还要断点查一下字符串的id,要用setParmStrings设置。之前还要实例化一个HAPI_ParmInfo,里面设置字符串id。下面的15是字符串id,43是参数id

Float/Int参数

如果是float或int,有prPramIntValue和prParmFloatValues两个property。当然值的id和整个参数的id也不一样,要断点查一下。下面的26/27是float的id。45是参数id。14是int的id。49是参数id。

最后build

还有,最后不要忘了调用一下buildall,万一onParmChange没搞定。

后记

其实这么一个一个找参数非常费劲,更好的方式是把参数写进一个json文件,然后Houdini里调用python解开这些数据。甚至mesh的数据/terrain的数据也能这么做。这样省去了寻找HoudiniParms参数的艰难。

发表评论

电子邮件地址不会被公开。 必填项已用*标注