Files
beyond/Assets/ThirdParty/PlayMaker/Actions/Character/ControllerSimpleMove.cs
2024-11-20 15:21:28 +01:00

57 lines
1.5 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Character)]
[Tooltip("Moves a Game Object with a Character Controller. Velocity along the y-axis is ignored. Speed is in meters/s. Gravity is automatically applied.")]
public class ControllerSimpleMove : FsmStateAction
{
[RequiredField]
[CheckForComponent(typeof(CharacterController))]
[Tooltip("The GameObject to move.")]
public FsmOwnerDefault gameObject;
[RequiredField]
[Tooltip("The movement vector.")]
public FsmVector3 moveVector;
[Tooltip("Multiply the movement vector by a speed factor.")]
public FsmFloat speed;
[Tooltip("Move in local or world space.")]
public Space space;
private GameObject previousGo; // remember so we can get new controller only when it changes.
private CharacterController controller;
public override void Reset()
{
gameObject = null;
moveVector = new FsmVector3 {UseVariable = true};
speed = 1;
space = Space.World;
}
public override void OnUpdate()
{
var go = Fsm.GetOwnerDefaultTarget(gameObject);
if (go == null) return;
if (go != previousGo)
{
controller = go.GetComponent<CharacterController>();
previousGo = go;
}
if (controller != null)
{
var move = space == Space.World ? moveVector.Value : go.transform.TransformDirection(moveVector.Value);
controller.SimpleMove(move * speed.Value);
}
}
}
}