Beispiel #1
0
    public void Start()
    {
        // Grab the HEU_HoduiniAsset
        _evergreenAsset = _evergreenGameObject.GetComponent <HEU_HoudiniAssetRoot>() != null?_evergreenGameObject.GetComponent <HEU_HoudiniAssetRoot>()._houdiniAsset : null;

        // Always get the latest parms after each cook
        List <HEU_ParameterData> parms = _evergreenAsset.Parameters.GetParameters();

        foreach (HEU_ParameterData parmData in parms)
        {
            Debug.Log(parmData._labelName);

            if (parmData._parmInfo.type == HAPI_ParmType.HAPI_PARMTYPE_BUTTON)
            {
                // Display a button: parmData._intValues[0];
            }
            else if (parmData._parmInfo.type == HAPI_ParmType.HAPI_PARMTYPE_FLOAT)
            {
                // Display a float: parmData._floatValues[0];

                // You can set a float this way
                HEU_ParameterUtility.SetFloat(_evergreenAsset, parmData._name, 1f);

                // Or this way (the index is 0, unless its for array of floats)
                parmData._floatValues[0] = 1;
            }
        }
        // Make sure to cook after changing
        _evergreenAsset.RequestCook(true, false, true, true);

        // Start a repeating updater
        InvokeRepeating("UpdateGravity", _updateRate, _updateRate);
    }
    /// <summary>
    /// Query the parameters in the HDA, and change some values.
    /// </summary>
    /// <param name="houdiniAsset">The HEU_HoudiniAsset of the loaded asset</param>
    public static void ChangeParmsAndCook(HEU_HoudiniAsset houdiniAsset)
    {
        // Always get the latest parms after each cook
        List <HEU_ParameterData> parms = houdiniAsset.Parameters.GetParameters();

        if (parms == null || parms.Count == 0)
        {
            Debug.LogFormat("No parms found");
            return;
        }

        // --------------------------------------------------------------------
        // Example to loop over each parm, checking its type and name. Then setting value.
        StringBuilder sb = new StringBuilder();

        foreach (HEU_ParameterData parmData in parms)
        {
            sb.AppendLine(string.Format("Parm: name={0}, type={1}", parmData._labelName, parmData._parmInfo.type));

            if (parmData._parmInfo.type == HAPI_ParmType.HAPI_PARMTYPE_BUTTON)
            {
                // Display a button: parmData._intValues[0];
            }
            else if (parmData._parmInfo.type == HAPI_ParmType.HAPI_PARMTYPE_FLOAT)
            {
                // Display a float: parmData._floatValues[0];

                // You can set a float this way
                HEU_ParameterUtility.SetFloat(houdiniAsset, parmData._name, 1f);

                // Or this way (the index is 0, unless its for array of floats)
                parmData._floatValues[0] = 1;
            }
        }
        Debug.Log("Parameters: \n" + sb.ToString());

        // --------------------------------------------------------------------
        // Examples to look up a parm via name, and set it.

        // Use helper to set float parameter with name
        HEU_ParameterUtility.SetFloat(houdiniAsset, "gravity", 5f);

        // Use helper to set random color
        HEU_ParameterUtility.SetColor(houdiniAsset, "branch_vtx_color_color", Random.ColorHSV());

        // Make sure to cook after changing parms
        CookAsset(houdiniAsset);
    }
Beispiel #3
0
    private void UpdateGravity()
    {
        if (_evergreenAsset != null)
        {
            float g = (1.0f + Mathf.Sin(Time.realtimeSinceStartup)) * _scale;

            // Use helper to set float parameter with name
            HEU_ParameterUtility.SetFloat(_evergreenAsset, "gravity", g);

            // Use helper to set random color
            HEU_ParameterUtility.SetColor(_evergreenAsset, "branch_vtx_color_color", Random.ColorHSV());

            // Cook synchronously to guarantee geometry generated in this update.
            _evergreenAsset.RequestCook(true, false, true, true);
        }
    }
    /// <summary>
    /// Randomizes the houdini variables of one plant according to the randomizer settings
    /// </summary>
    /// <param name="spawnSettings"></param>
    /// <returns></returns>
    private IEnumerator randomizeHoudiniVars(PlantSpawnSettings spawnSettings)
    {
        HEU_HoudiniAssetRoot assetRoot = spawnSettings.mainHoudiniPlant.GetComponent <HEU_HoudiniAssetRoot>();

        foreach (PlantVariationSetting variation in spawnSettings.randomizers)
        {
            switch (variation.type)
            {
            case PlantVariationTypes.Int:
                HEU_ParameterUtility.SetInt(assetRoot._houdiniAsset, variation.houdiniKey, Random.Range((int)variation.minValue, (int)variation.maxValue));
                break;

            case PlantVariationTypes.Float:
                HEU_ParameterUtility.SetFloat(assetRoot._houdiniAsset, variation.houdiniKey, Random.Range(variation.minValue, variation.maxValue));
                break;
            }
        }
        assetRoot._houdiniAsset.RequestCook(bCheckParametersChanged: true, bAsync: false, bSkipCookCheck: true, bUploadParameters: true);
        yield return(null);
    }