hi all , I am recently use more playmaker on a project i am on ( almost exclusively)
and wanted to share a little action..XD
i use that often with animated stuff , etc..may not super optimized or perfect for all fit ...
simple enough 0 no constrain 1 full constrain and you can eventually put whatever number you want in the both vector.
here we go >
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
	[ActionCategory(ActionCategory.Transform)]
	[Tooltip("Constrain position and rotation to any other object, 0 for no constrain, 1 for full constrain")]
	public class Constrain : FsmStateAction
	{
		[RequiredField]
		public FsmOwnerDefault gameObject;
		[RequiredField]
		[UIHint(UIHint.FsmGameObject)]
		public FsmGameObject target;
		public FsmBool doRotation;
		public FsmVector3 rotationConstrain;
		public FsmBool doPosition;
		public FsmVector3 positionConstrain;
		public FsmVector3 offsetPosition;
		public bool everyFrame;
		
		public override void Reset ()
		{
			gameObject = null;
			target = null;
			doRotation = null;
			doPosition = null;
			rotationConstrain = null;
			positionConstrain = null;
			offsetPosition = null;
			everyFrame = false;
		}
		
		public override void OnEnter ()
		{
			DoConstrain();
			
			if (!everyFrame)
				Finish();		
		}
		
		public override void OnUpdate ()
		{
			DoConstrain();
		}
		
		void DoConstrain()
		{
			var go = Fsm.GetOwnerDefaultTarget(gameObject);
			if (go == null) 
				return;
			
			var tr = target.Value.transform;
			if(tr == null)
				return;
			
			// perform constraining
			var wantedPosition = tr.TransformPoint(offsetPosition.Value);
			
			// calculate position
			if(doPosition.Value == true)
			{
				wantedPosition = new Vector3( wantedPosition.x * positionConstrain.Value.x,
				                             		   wantedPosition.y * positionConstrain.Value.y,
				                             		   wantedPosition.z * positionConstrain.Value.z);
				
				go.transform.position = wantedPosition;
			}
				
			
			// calculate rotation
			go.transform.eulerAngles = new Vector3( tr.eulerAngles.x * rotationConstrain.Value.x,
			                                       			 tr.eulerAngles.y * rotationConstrain.Value.y,
			                                       			 tr.eulerAngles.z * rotationConstrain.Value.z);
		}
	}
}