MovementSchema.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using UnityEngine;
  2. /// <summary>
  3. /// Configurable movement schema for different AI behaviors when teammate has puck.
  4. /// Allows customization of positioning and support patterns.
  5. /// </summary>
  6. [CreateAssetMenu(fileName = "MovementSchema", menuName = "Hockey/AI/Movement Schema")]
  7. public class MovementSchema : ScriptableObject
  8. {
  9. [Header("General Settings")]
  10. [Tooltip("Name of this movement schema")]
  11. public string schemaName = "Default";
  12. [Header("Defender Behavior When Teammate Has Puck")]
  13. [Tooltip("How far ahead of the puck carrier should defenders position")]
  14. [Range(0f, 15f)]
  15. public float defenderSupportDistance = 5f;
  16. [Tooltip("How wide should defenders spread (lateral distance)")]
  17. [Range(0f, 10f)]
  18. public float defenderLateralSpread = 4f;
  19. [Tooltip("Should defender stay at blue line or push forward")]
  20. public bool defenderStayAtBlueLine = false;
  21. [Header("Forward Behavior When Teammate Has Puck")]
  22. [Tooltip("How far ahead should forwards position")]
  23. [Range(0f, 20f)]
  24. public float forwardPushDistance = 8f;
  25. [Tooltip("Width of forward spread")]
  26. [Range(0f, 15f)]
  27. public float forwardLateralSpread = 6f;
  28. [Tooltip("How aggressively forwards should push into offensive zone")]
  29. [Range(0f, 1f)]
  30. public float forwardAggressiveness = 0.7f;
  31. [Tooltip("Minimum speed forwards should maintain when attacking")]
  32. [Range(0f, 10f)]
  33. public float forwardMinimumSpeed = 3f;
  34. [Header("Pass Reception")]
  35. [Tooltip("How far from puck carrier to look for pass reception positions")]
  36. [Range(5f, 30f)]
  37. public float passReceptionDistance = 15f;
  38. [Tooltip("Prefer positions closer to opponent goal")]
  39. public bool favorOffensivePositions = true;
  40. [Header("Defensive Coverage")]
  41. [Tooltip("Formation when opponent has puck: Tight = close together, Wide = spread out")]
  42. [Range(0f, 1f)]
  43. public float defensiveFormationWidth = 0.5f;
  44. [Tooltip("How deep defenders should play (closer to own goal)")]
  45. [Range(0f, 1f)]
  46. public float defensiveDepth = 0.6f;
  47. [Header("Forechecking")]
  48. [Tooltip("Number of forwards that should aggressively forecheck")]
  49. [Range(0, 3)]
  50. public int forecheckersCount = 1;
  51. [Tooltip("How aggressive the forecheck should be")]
  52. [Range(0f, 1f)]
  53. public float forecheckAggression = 0.5f;
  54. }