// Animancer // Copyright 2020 Kybernetik // #pragma warning disable CS0649 // Field is never assigned to, and will always have its default value. using UnityEngine; namespace Animancer.Examples.Locomotion { /// /// Animates a simple character to be able to stand idle or walk forwards or backwards based on user input. /// [AddComponentMenu(Strings.MenuPrefix + "Examples/Locomotion - Idle And Walk")] [HelpURL(Strings.APIDocumentationURL + ".Examples.Locomotion/IdleAndWalk")] public class IdleAndWalk : MonoBehaviour { /************************************************************************************************************************/ [SerializeField] private AnimancerComponent _Animancer; public AnimancerComponent Animancer { get { return _Animancer; } } [SerializeField] private AnimationClip _Idle; public AnimationClip Idle { get { return _Idle; } } [SerializeField] private AnimationClip _Walk; public AnimationClip Walk { get { return _Walk; } } /************************************************************************************************************************/ protected void Update() { // W or UpArrow = 1. // S or DownArrow = -1. // Otherwise 0. var movement = Input.GetAxisRaw("Vertical"); if (movement != 0) { PlayMove(); // Since we don't have animations for moving backwards, just use the input as their speed so that // moving backwards simply plays the animation backwards. _Animancer.States.Current.Speed = movement; // PlayMove could return the AnimancerState it plays, but using the CurrentState saves a bit of effort. } else { // If we aren't moving, return to idle. _Animancer.Play(_Idle, 0.25f); } } /************************************************************************************************************************/ // We want to override this method in the IdleAndWalkAndRun script. protected virtual void PlayMove() { _Animancer.Play(_Walk, 0.25f); } /************************************************************************************************************************/ /// /// If you add a second script derived from this type to the same object, it will instead change the type of /// the existing component, allowing you to easily swap between and /// . /// protected virtual void Reset() { AnimancerUtilities.IfMultiComponentThenChangeType(this); } /************************************************************************************************************************/ } }