FloatParameterSlider.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
  2. #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value.
  3. using UnityEngine;
  4. #if UNITY_UGUI
  5. using UnityEngine.UI;
  6. #endif
  7. namespace Animancer.Samples.Mixers
  8. {
  9. /// <summary>Binds a <see cref="Parameter{T}"/> to a <see cref="Slider"/>.</summary>
  10. ///
  11. /// <remarks>
  12. /// <strong>Sample:</strong>
  13. /// <see href="https://kybernetik.com.au/animancer/docs/samples/mixers/linear">
  14. /// Linear Mixers</see>
  15. /// </remarks>
  16. ///
  17. /// https://kybernetik.com.au/animancer/api/Animancer.Samples.Mixers/FloatParameterSlider
  18. ///
  19. [AddComponentMenu(Strings.SamplesMenuPrefix + "Mixers - Float Parameter Slider")]
  20. [AnimancerHelpUrl(typeof(FloatParameterSlider))]
  21. public class FloatParameterSlider : MonoBehaviour
  22. {
  23. /************************************************************************************************************************/
  24. #if UNITY_UGUI
  25. /************************************************************************************************************************/
  26. [SerializeField] private Slider _Slider;
  27. [SerializeField] private AnimancerComponent _Animancer;
  28. [SerializeField] private StringAsset _ParameterName;
  29. /************************************************************************************************************************/
  30. private Parameter<float> _Parameter;
  31. protected virtual void Awake()
  32. {
  33. _Parameter = _Animancer.Parameters.GetOrCreate<float>(_ParameterName);
  34. // When the slider changes, set the parameter.
  35. _Slider.onValueChanged.AddListener(_Parameter.SetValue);
  36. // When the parameter changes, set the slider.
  37. _Parameter.OnValueChanged += value => _Slider.value = value;
  38. // This won't cause an infinite loop because both systems will only
  39. // invoke their change event if the value is actually different.
  40. }
  41. /************************************************************************************************************************/
  42. // You can also get and set parameters by name instead of caching the Parameter<float>.
  43. // But that's a bit slower because it requires a dictionary lookup
  44. // to find the target parameter each time it's accessed.
  45. public float ParameterValueLazy
  46. {
  47. get => _Animancer.Parameters.GetFloat(_ParameterName);
  48. set => _Animancer.Parameters.SetValue(_ParameterName, value);
  49. }
  50. /************************************************************************************************************************/
  51. // Smoothly move the value over time for recording the documentation video.
  52. //protected virtual void Update()
  53. //{
  54. // _Parameter.Value = (Mathf.Sin(Time.timeSinceLevelLoad / 3) * 0.5f + 0.5f) * 1.5f;
  55. //}
  56. /************************************************************************************************************************/
  57. #else
  58. /************************************************************************************************************************/
  59. protected virtual void Awake()
  60. {
  61. SampleReadMe.LogMissingUnityUIModuleError(this);
  62. }
  63. /************************************************************************************************************************/
  64. #endif
  65. /************************************************************************************************************************/
  66. }
  67. }