91 lines
4.2 KiB
C#
91 lines
4.2 KiB
C#
using UnityEngine;
|
|
using UnityEditor;
|
|
|
|
#if UNITY_EDITOR
|
|
/// <summary>
|
|
/// Utility class to help set up the animation system with the input system.
|
|
/// This can be accessed from the Unity Editor menu.
|
|
/// </summary>
|
|
public class InputAnimationSetup : MonoBehaviour
|
|
{
|
|
[MenuItem("Tools/Setup Input Animation System")]
|
|
public static void SetupInputAnimationSystem()
|
|
{
|
|
// Find the player character (assuming it has a PlayerInput component)
|
|
var playerInputs = UnityEngine.Object.FindObjectsByType<UnityEngine.InputSystem.PlayerInput>(UnityEngine.FindObjectsSortMode.None);
|
|
|
|
if (playerInputs.Length == 0)
|
|
{
|
|
Debug.LogError("No PlayerInput component found in the scene. Make sure your player character has a PlayerInput component.");
|
|
return;
|
|
}
|
|
|
|
GameObject targetObject = null;
|
|
|
|
// If there are multiple PlayerInput components, show a selection dialog
|
|
if (playerInputs.Length > 1)
|
|
{
|
|
Debug.LogWarning("Multiple PlayerInput components found. Selecting the first one.");
|
|
targetObject = playerInputs[0].gameObject;
|
|
}
|
|
else
|
|
{
|
|
targetObject = playerInputs[0].gameObject;
|
|
}
|
|
|
|
if (targetObject == null)
|
|
{
|
|
Debug.LogError("Failed to find a suitable target object.");
|
|
return;
|
|
}
|
|
|
|
// Check if the target object already has an AnimationManager
|
|
AnimationManager animManager = targetObject.GetComponent<AnimationManager>();
|
|
if (animManager == null)
|
|
{
|
|
animManager = targetObject.AddComponent<AnimationManager>();
|
|
Debug.Log("Added AnimationManager to " + targetObject.name);
|
|
}
|
|
|
|
// Check if the target object already has an InputToAnimation
|
|
InputToAnimation inputAnim = targetObject.GetComponent<InputToAnimation>();
|
|
if (inputAnim == null)
|
|
{
|
|
inputAnim = targetObject.AddComponent<InputToAnimation>();
|
|
Debug.Log("Added InputToAnimation to " + targetObject.name);
|
|
}
|
|
|
|
// Configure the InputToAnimation component with default mappings for our 8 core animations
|
|
SerializedObject serializedInputAnim = new SerializedObject(inputAnim);
|
|
serializedInputAnim.FindProperty("jabInputAction").stringValue = "Jab";
|
|
serializedInputAnim.FindProperty("haymakerInputAction").stringValue = "Haymaker";
|
|
serializedInputAnim.FindProperty("spinningBackfistInputAction").stringValue = "SpinningBackfist";
|
|
serializedInputAnim.FindProperty("elbowSmashInputAction").stringValue = "ElbowSmash";
|
|
serializedInputAnim.FindProperty("airPunchInputAction").stringValue = "AirPunch";
|
|
serializedInputAnim.FindProperty("lowKickInputAction").stringValue = "LowKick";
|
|
serializedInputAnim.FindProperty("basicKickInputAction").stringValue = "BasicKick";
|
|
serializedInputAnim.FindProperty("sumoSlapInputAction").stringValue = "SumoSlap";
|
|
serializedInputAnim.ApplyModifiedProperties();
|
|
|
|
// Make sure the target object has an Animator component
|
|
Animator animator = targetObject.GetComponent<Animator>();
|
|
if (animator == null)
|
|
{
|
|
animator = targetObject.AddComponent<Animator>();
|
|
Debug.LogWarning("Added Animator component to " + targetObject.name + ", but you'll need to assign an animator controller to it.");
|
|
}
|
|
|
|
// Display info about which animations are active
|
|
Debug.Log("Only the following 8 animations are currently active:");
|
|
Debug.Log("- Jab\n- Haymaker\n- BasicKick\n- SumoSlap\n- SpinningBackfist\n- ElbowSmash\n- AirPunch\n- LowKick");
|
|
Debug.Log("Other animations have been commented out for future use.");
|
|
Debug.Log("Legacy direct triggers in PlayerScript have been neutralized. InputToAnimation now exclusively drives animations via the new Input System.");
|
|
|
|
// Select the object in the inspector for easier configuration
|
|
Selection.activeGameObject = targetObject;
|
|
|
|
Debug.Log("Input Animation System setup complete for " + targetObject.name);
|
|
Debug.Log("Make sure all animation clips are properly set up in your Animator Controller!");
|
|
}
|
|
}
|
|
#endif |