You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
3.0 KiB
C#
61 lines
3.0 KiB
C#
// 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.Events
|
|
{
|
|
/// <summary>
|
|
/// An <see cref="GolfHitController"/> that uses a <see cref="SimpleEventReceiver"/> to recenve an Animation Event
|
|
/// with the function name <c>"Event"</c>.
|
|
/// </summary>
|
|
[AddComponentMenu(Strings.MenuPrefix + "Examples/Golf Events - Animation Simple")]
|
|
[HelpURL(Strings.APIDocumentationURL + ".Examples.AnimationEvents/GolfHitControllerAnimationSimple")]
|
|
public sealed class GolfHitControllerAnimationSimple : GolfHitController
|
|
{
|
|
/************************************************************************************************************************/
|
|
|
|
[SerializeField] private SimpleEventReceiver _EventReceiver;
|
|
|
|
/************************************************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// Calls the base <see cref="GolfHitController.Awake"/> method and register
|
|
/// <see cref="GolfHitController.EndSwing"/> to be called whenever the swing animation ends.
|
|
/// <para></para>
|
|
/// Normally Animancer could call the registered method at the End Time defined in the transition, but in this
|
|
/// case the <see cref="AnimationClip"/> used with this script has an Animation Event with the Function Name
|
|
/// "End", which will execute the registered method when that event time passes.
|
|
/// </summary>
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
_Swing.Events.Sequence.OnEnd = EndSwing;
|
|
}
|
|
|
|
/************************************************************************************************************************/
|
|
|
|
/// <summary>
|
|
/// After starting the swing animation, we also need to give the <see cref="SimpleEventReceiver"/> the callback
|
|
/// that we want it to trigger when it receives an Animation Event with the Function Name "Event".
|
|
/// <para></para>
|
|
/// In this case since there is only one animation with that event we could register it in <see cref="Awake"/>
|
|
/// without tieing it to a specific state, but normally the point of a <see cref="SimpleEventReceiver"/> is to
|
|
/// allow multiple scripts to register their own callback for whatever animation they are playing.
|
|
/// </summary>
|
|
protected override void StartSwing()
|
|
{
|
|
base.StartSwing();
|
|
|
|
var state = _Animancer.States.Current;
|
|
|
|
// When the Animation Event with the function name "Event" occurs:
|
|
// If the swing animation doesn't have an event with that function name, this will log a warning.
|
|
_EventReceiver.onEvent.Set(state, (animationEvent) => HitBall());
|
|
}
|
|
|
|
/************************************************************************************************************************/
|
|
}
|
|
}
|