Well, I wrote an interactive Variable Calculus book and, as I don't know a "3D locator", I used mouse events to select and drag points. I learned the code from several posts. Here I share tow basic examples
First one you can see in here. Second one follow

The code is
Manipulate[Grid[{ (*Titulos*) {Style["Puntos en 3D", Bold, 10,RGBColor[0.12, 0, 0.5]]}, { (*------------------------------------------ 3D --------------------*) DynamicModule[{pts={{2,0,2},{0,2,1}},index=0,pos0,pos1,mypr={{-2,4},{-2,4},{-2,4}},AV1Cap1Obj}, (*Objetos*) AV1Cap1Obj[var_]:=If[var==1,{Thickness[0.0001],Arrowheads[0.00], Arrow[ {{0,0,0},{0,0,0}} ] }, If[var==2,{PointSize[0.03], Point[Dynamic@pts[[2]]],FaceForm[],EdgeForm[], Cuboid[Dynamic[pts[[2]]-{0.5,0.5,0.5}]] } ] ]; (* *) EventHandler[ Graphics3D[{ AV0Cap1ejes, (*---------- Parte dinámica --------------*) Dynamic[{Text[,1.1pts[[2]],{0,-1}], Dashed, Thick, RGBColor[0, 0.3, 0], Gray, Line[{{pts[[2,1]],0,0},{pts[[2,1]],pts[[2,2]],0},{0,pts[[2,2]],0}}],Line[{{pts[[2,1]],pts[[2,2]],0},pts[[2]],{0,0,pts[[2,3]]}}], Text[Style[NumberForm[Round[pts[[2,1]],0.1],2],Bold,10],{pts[[2,1]],-0.4,0}], Text[Style[NumberForm[Round[pts[[2,2]],0.1],2],Bold,10],{-0.4,pts[[2,2]],0}],Text[Style[NumberForm[Round[pts[[2,3]],0.1],2],Bold,10],{0,-0.4,pts[[2,3]]}] }], MouseAppearance[EventHandler[ (*Función: Aplica # a {1,2,...}*) Mouseover[ { (*expr base, mouse fuera*) Dynamic[If[index===#,Red,RGBColor[0, 0.34, 0]]],AV1Cap1Obj[#] }, {(* mouse over*) Dynamic[If[index===0||index===#,Red,RGBColor[0, 0.34, 0]]],AV1Cap1Obj[#] } ](*MouseOver*), {"MouseDown":>(index=#;pos0=pts[[index]]) (*Selecciona: pos0 = posición actual*) }, PassEventsUp->True]&/@Range[Length[pts]](*EventHandler local, #=1,2,....*),"Arrow"] } (*Opciones Graphics3D*) ,PlotRange->mypr,ImageSize->350, ViewPoint->{1,1, 0.6}, Boxed->False,ImagePadding->None,SphericalRegion->True](*Graphics3D*) ,{ (*Si arrastra...*) "MouseDragged":>If[index>0,((pos1=#[[2]]+Projection[pos0-#[[2]],#[[1]]-#[[2]]])&@MousePosition["Graphics3DBoxIntercepts"]); pts[[index]]=pos1 ], (*Clip puntos*) "MouseUp":>(pts[[All,3]]=Clip[pts[[All,3]],{-1.8,2.8}];pts[[All,2]]=Clip[pts[[All,2]],{-1.8,2.8}];pts[[All,1]]=Clip[pts[[All,1]],{-1.8,2.8}]; index=0) }, (*Pass the events to LocatorPane by setting PassEventsDown\[Rule]True in the deepest event handlers*) PassEventsDown->True](*EventHandler Global*) ](*DynamicModule*) }}, Alignment->Top], (*Grid*) (*-------Manipulate------*) ContentSize ->Automatic, ControlPlacement->Top, AppearanceElements->None, Alignment->{Top}, SaveDefinitions->True, SynchronousInitialization->False, Initialization:>{ violeta=RGBColor[0.12, 0, 0.5]; Ejes3DTxy[xmin_,xmax_,ymin_,ymax_,zmin_,zmax_]:={ Black,Arrowheads[Medium], Arrow[Tube[{{xmin,0,0.01},{0,0,0.01},{xmax,0,0.01}},0.007]], Arrow[Tube[{{0,ymin+0.01,0.01},{0,0,0.01},{0,ymax+0.01,0.01}},0.007]], Arrow[Tube[{{0.01,0.01,zmin+0.01},{0.01,0.01,0.01},{0,0,zmax+0.01}},0.007]], Gray, Table[Line[{{IntegerPart[xmin],i,0},{IntegerPart[xmax],i,0}}],{i,IntegerPart[ymin],IntegerPart[ymax],1}],Table[Line[{{i,IntegerPart[ymin],0},{i,IntegerPart[ymax],0}}],{i,IntegerPart[xmin],IntegerPart[xmax],1}], }; AV0Cap1ejes=Ejes3DTxy[-1,3,-1,3,0,3]; wNformat[var_]:=Style[NumberForm[Round[ var ,0.1],3],Bold,12,RGBColor[0.23, 0, 0.70]]}]
ResourceFunction["Locator3D"]- it is intended to be a drop-in replacement forLocatorin 3D. (Apart from the fact that you can't use it as control type forManipilate) - I'll add a more concrete answer once I'm back at my PC $\endgroup$