com.alicizax.kybernetik.ani.../Runtime/Utilities/Redirect Root Motion/RedirectRootMotionToCharacterController.cs
陈思海 3e7c253249 init
2025-01-08 15:26:57 +08:00

58 lines
1.9 KiB
C#

// Animancer // https://kybernetik.com.au/animancer // Copyright 2018-2024 Kybernetik //
#if UNITY_PHYSICS_3D
using UnityEngine;
namespace Animancer
{
/// <summary>
/// A component which takes the root motion from an <see cref="Animator"/> and applies it to a
/// <see cref="CharacterController"/>.
/// </summary>
///
/// <remarks>
/// <strong>Documentation:</strong>
/// <see href="https://kybernetik.com.au/animancer/docs/manual/other/root-motion#redirecting-root-motion">
/// Redirecting Root Motion</see>
/// </remarks>
///
/// https://kybernetik.com.au/animancer/api/Animancer/RedirectRootMotionToCharacterController
///
[AddComponentMenu("Animancer/Redirect Root Motion To Character Controller")]
[HelpURL("https://kybernetik.com.au/animancer/api/Animancer/" + nameof(RedirectRootMotionToCharacterController))]
public class RedirectRootMotionToCharacterController : RedirectRootMotion<CharacterController>
{
/************************************************************************************************************************/
/// <inheritdoc/>
public override Vector3 Position
{
get => Target.transform.position;
set => Target.Move(value - Position);
}
/// <inheritdoc/>
public override Quaternion Rotation
{
get => Target.transform.rotation;
set => Target.transform.rotation = value;
}
/// <inheritdoc/>
protected override void OnAnimatorMove()
{
if (!ApplyRootMotion)
return;
Target.Move(Animator.deltaPosition);
Target.transform.rotation *= Animator.deltaRotation;
}
/************************************************************************************************************************/
}
}
#endif