57 lines
1.5 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|