This custom action will call Final IK's Start Interaction function with options for which Interaction System to call it on, what Effector Type (body part), which Interaction Object, and a bool for interrupting:
bool StartInteraction (FullBodyBipedEffector effectorType, InteractionObject interactionObject, bool interrupt)
Here's a tutorial showing how the custom action was created. The video also covers how to use the action in a project:
https://www.youtube.com/watch?v=uTc5y9XA0ak
Here's the Custom Action and how to use it:
Script: ActionFinalIKStartInteraction.cs
using UnityEngine; using System.Collections; using System.Collections.Generic; using RootMotion.FinalIK; #if UNITY_EDITOR using UnityEditor; #endif namespace AC { [System.Serializable] public class ActionFinalIKStartInteraction : Action { public GameObject interactionSystem; public bool isPlayer; public FullBodyBipedEffector effector; public GameObject interactionObject; public bool interrupt; public int constantID_is, constantID_io; public int parameterID_is, parameterID_io = -1; public ActionFinalIKStartInteraction() { this.isDisplayed = true; category = ActionCategory.Custom; title = "Final IK Start Interaction"; description = "This calls Final IK StartInteraction function"; } override public void AssignValues(List<ActionParameter> parameters) { if (isPlayer) { interactionSystem = KickStarter.player.gameObject; } else { interactionSystem = AssignFile(parameters, parameterID_is, constantID_is, interactionSystem); } interactionObject = AssignFile(parameters, parameterID_io, constantID_io, interactionObject); } override public float Run () { if (interactionSystem && interactionObject ) { InteractionSystem interactionSystemScript = interactionSystem.GetComponent<InteractionSystem>(); InteractionObject interactionObjectScript = interactionObject.GetComponent<InteractionObject>(); if (interactionSystemScript && interactionObjectScript) { interactionSystemScript.StartInteraction(effector, interactionObjectScript, interrupt); } } return 0f; } #if UNITY_EDITOR override public void ShowGUI (List<ActionParameter> parameters) { isPlayer = EditorGUILayout.Toggle("Interaction System on Player:", isPlayer); if (isPlayer) { interactionSystem = KickStarter.player.gameObject; parameterID_is = -1; } else { parameterID_is = Action.ChooseParameterGUI("Interaction System:", parameters, parameterID_is, ParameterType.GameObject); if (parameterID_is >= 0) { constantID_is = 0; interactionSystem = null; } else { interactionSystem = (GameObject)EditorGUILayout.ObjectField("Interaction System:", interactionSystem, typeof(GameObject), true); constantID_is = FieldToID(interactionSystem, constantID_is); interactionSystem = IDToField(interactionSystem, constantID_is, true); } } effector = (FullBodyBipedEffector)EditorGUILayout.EnumPopup("Full Body Biped Effector:", effector); parameterID_io = Action.ChooseParameterGUI("Interaction Object:", parameters, parameterID_io, ParameterType.GameObject); if (parameterID_io >= 0) { constantID_io = 0; interactionObject = null; } else { interactionObject = (GameObject)EditorGUILayout.ObjectField("Interaction Object:", interactionObject, typeof(GameObject), true); constantID_io = FieldToID(interactionObject, constantID_io); interactionObject = IDToField(interactionObject, constantID_io, true); } interrupt = EditorGUILayout.Toggle("Interrupt:", interrupt); AfterRunningOption (); } public override string SetLabel () { string labelAdd = ""; if (interactionObject) { labelAdd = " " + effector + " on" + interactionObject.name; } return labelAdd; } #endif } }