// (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(); previousGo = go; } if (controller != null) { var move = space == Space.World ? moveVector.Value : go.transform.TransformDirection(moveVector.Value); controller.SimpleMove(move * speed.Value); } } } }