// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik // #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value. using UnityEngine; namespace Animancer.Samples.Basics { /// /// Combines and into one script. /// /// /// /// Sample: /// /// Basic Character /// /// /// https://kybernetik.com.au/animancer/api/Animancer.Samples.Basics/BasicCharacterAnimations /// [AddComponentMenu(Strings.SamplesMenuPrefix + "Basics - Basic Character Animations")] [AnimancerHelpUrl(typeof(BasicCharacterAnimations))] public class BasicCharacterAnimations : MonoBehaviour { /************************************************************************************************************************/ [SerializeField] private AnimancerComponent _Animancer; [SerializeField] private ClipTransition _Idle; [SerializeField] private ClipTransition _Move; [SerializeField] private ClipTransition _Action; private State _CurrentState; private enum State { NotActing,// Idle and Move can be interrupted. Acting,// Action can only be interrupted by itself. } /************************************************************************************************************************/ protected virtual void Awake() { _Action.Events.OnEnd = UpdateMovement; } /************************************************************************************************************************/ protected virtual void Update() { switch (_CurrentState) { case State.NotActing: UpdateMovement(); UpdateAction(); break; case State.Acting: UpdateAction(); break; } } /************************************************************************************************************************/ private void UpdateMovement() { _CurrentState = State.NotActing; float forward = SampleInput.WASD.y; if (forward > 0) { _Animancer.Play(_Move); } else { _Animancer.Play(_Idle); } } /************************************************************************************************************************/ private void UpdateAction() { if (SampleInput.LeftMouseUp) { _CurrentState = State.Acting; _Animancer.Play(_Action); } } /************************************************************************************************************************/ } }