// Animancer // https://kybernetik.com.au/animancer // Copyright 2022 Kybernetik //
#pragma warning disable CS0649 // Field is never assigned to, and will always have its default value.
using UnityEngine;
namespace Animancer.Examples.AnimatorControllers
{
/// Demonstrates how to play Animator Controllers alongside Animancer.
/// Animator Controllers
/// https://kybernetik.com.au/animancer/api/Animancer.Examples.AnimatorControllers/HybridBasics
///
[AddComponentMenu(Strings.ExamplesMenuPrefix + "Animator Controllers - Hybrid Basics")]
[HelpURL(Strings.DocsURLs.ExampleAPIDocumentation + nameof(AnimatorControllers) + "/" + nameof(HybridBasics))]
public sealed class HybridBasics : MonoBehaviour
{
/************************************************************************************************************************/
[SerializeField] private AnimancerComponent _Animancer;
[SerializeField] private AnimationClip _SeparateAnimation;
/************************************************************************************************************************/
private void Awake()
{
// This example's documentation explains why this warning exists so we don't need it enabled.
OptionalWarning.NativeControllerHumanoid.Disable();
}
/************************************************************************************************************************/
private static readonly int MoveParameterID = Animator.StringToHash("Move");
// Called by a UI Toggle.
public void SetMove(bool move)
{
// Call SetBool on the HybridAnimancerComponent:
if (_Animancer is HybridAnimancerComponent hybrid)
hybrid.SetBool(MoveParameterID, move);
else// Or on the Animator:
_Animancer.Animator.SetBool(MoveParameterID, move);
}
/************************************************************************************************************************/
// Called by a UI Button.
public void PlaySeparateAnimation()
{
_Animancer.Play(_SeparateAnimation);
}
/************************************************************************************************************************/
// Called by a UI Button.
public void PlayAnimatorController()
{
// Play the Animator Controller on the HybridAnimancerComponent:
if (_Animancer is HybridAnimancerComponent hybrid)
hybrid.Play(hybrid.Controller, 0);
else// Or Stop the AnimancerComponent to let the native Animator Controller resume control:
_Animancer.Stop();
}
/************************************************************************************************************************/
// Called by a UI Button.
public void FadeSeparateAnimation()
{
_Animancer.Play(_SeparateAnimation, 0.25f);
}
/************************************************************************************************************************/
// Called by a UI Button.
public void FadeAnimatorController()
{
// Play the Animator Controller on the HybridAnimancerComponent:
if (_Animancer is HybridAnimancerComponent hybrid)
hybrid.PlayController();
else// Or fade out the Animancer Layer to let the native Animator Controller resume control:
_Animancer.Layers[0].StartFade(0, 0.25f);
}
/************************************************************************************************************************/
}
}