CharacterSelector.cs 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. // Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
  2. #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value.
  3. using UnityEngine;
  4. using UnityEngine.UI;
  5. namespace Animancer.Examples.AnimatorControllers.GameKit
  6. {
  7. /// <summary>A simple system for selecting characters.</summary>
  8. /// <example><see href="https://kybernetik.com.au/animancer/docs/examples/animator-controllers/3d-game-kit">3D Game Kit</see></example>
  9. /// https://kybernetik.com.au/animancer/api/Animancer.Examples.AnimatorControllers.GameKit/CharacterSelector
  10. ///
  11. [AddComponentMenu(Strings.ExamplesMenuPrefix + "Game Kit - Character Selector")]
  12. [HelpURL(Strings.DocsURLs.ExampleAPIDocumentation + nameof(AnimatorControllers) + "." + nameof(GameKit) + "/" + nameof(CharacterSelector))]
  13. public sealed class CharacterSelector : MonoBehaviour
  14. {
  15. /************************************************************************************************************************/
  16. [SerializeField] private Text _Text;
  17. [SerializeField] private GameObject[] _Characters;
  18. /************************************************************************************************************************/
  19. private void Awake()
  20. {
  21. SelectCharacter(0);
  22. }
  23. /************************************************************************************************************************/
  24. private void Update()
  25. {
  26. if (ExampleInput.Number1Up)
  27. SelectCharacter(0);
  28. else if (ExampleInput.Number2Up)
  29. SelectCharacter(1);
  30. }
  31. /************************************************************************************************************************/
  32. private void SelectCharacter(int index)
  33. {
  34. var text = ObjectPool.AcquireStringBuilder();
  35. for (int i = 0; i < _Characters.Length; i++)
  36. {
  37. // Activate the target and deactivate everyone else.
  38. var active = i == index;
  39. _Characters[i].SetActive(active);
  40. // Build all their names into a string explaining which keys they correspond to.
  41. if (i > 0)
  42. text.AppendLine();
  43. if (active)// Use Rich Text Tags to make the active character Bold.
  44. text.Append("<b>");
  45. text.Append(1 + i)
  46. .Append(" = ")
  47. .Append(_Characters[i].name);
  48. if (active)
  49. text.Append("</b>");
  50. }
  51. _Text.text = text.ReleaseToString();
  52. }
  53. /************************************************************************************************************************/
  54. }
  55. }