Demo/DemoFollowMouse.cs
using Sandbox;

[Title("[DEMO] Follow Mouse On Plane"), Category("Second Order Dynamics (Demo)")]
public sealed class DemoFollowMouse : Component
{
	[Property] private CameraComponent Camera { get; set; }
	[Property] private float PlaneDistance { get; set; } = 100;
	[Property] private GameObject TargetObject { get; set; }
	
	protected override void OnUpdate()
	{
		var ray = Camera.ScreenPixelToRay( Mouse.Position );
		var p = new Plane( Camera.WorldPosition + Camera.WorldTransform.Forward * PlaneDistance,
			Camera.WorldTransform.Backward );
		var pt = p.Trace( ray );
		
		if (pt.HasValue)
			TargetObject.WorldPosition = pt.Value;
	}
}