How do i move ANCHORED object with mouse SMOOTHLY

  1. What do you want to achieve? Keep it simple and clear! i want to move ANCHORED object with mouse SMOOTHLY

  2. What is the issue? Include screenshots / videos if possible! i already make one but its not smooth

  3. What solutions have you tried so far? Did you look for solutions on the Developer Hub?
    people say i need to use set network owner, well i cant use set network owner because it is ANCHORED

please help me!!!

Firat add a local script inside characterscript then try this code :


local CAS = game:GetService("ContextActionService")
 
local GrabObject = nil
local GrabStart = false
local Dragger = nil
 
local player = game.Players.LocalPlayer
local character = player.Character
local mouse = player:GetMouse()
local camera = game.Workspace.CurrentCamera
 
function Grab(actionName, UserInputState, InputObject)
	if actionName == "Grab" then
		if UserInputState == Enum.UserInputState.Begin then
			-- start grab
			local Magnitude = (mouse.Hit.Position - character.Head.CFrame.Position).magnitude
			if Magnitude < 10 then
				
				if mouse.Target then
					
					GrabObject = mouse.Target
					GrabStart = true
					
					local DragBall = createDragBall()
					DragBall.CFrame = mouse.Hit
					Dragger = DragBall
					
					mouse.TargetFilter = GrabObject
					
					local DragBallWeld = weldBetween(DragBall,GrabObject)
					addMover(DragBall)
					
					while Dragger do
						--Create a ray from the users head to the mouse.
						local cf = CFrame.new(character.Head.Position, mouse.Hit.Position)
						Dragger.Mover.Position = (cf + (cf.LookVector * 10)).Position
						Dragger.RotMover.CFrame = camera.CFrame * CFrame.Angles(Dragger.RotOffset.Value.X,Dragger.RotOffset.Value.Y, Dragger.RotOffset.Value.Z)
						wait()
					end
					mouse.TargetFilter = nil
				end
			end
		elseif UserInputState == Enum.UserInputState.End then
			-- stop grab
			
			GrabObject = nil
			GrabStart = false
			if Dragger then
				Dragger:Destroy()
				Dragger = nil
			end
		end
	end	
end
 
 
function weldBetween(a, b)
	local weld = Instance.new("ManualWeld", a)
	weld.C0 = a.CFrame:inverse() * b.CFrame
	weld.Part0 = a
	weld.Part1 = b
	return weld
end
 
 
function addMover(part)
	local newMover = Instance.new("BodyPosition")
	newMover.Parent = part
	newMover.MaxForce = Vector3.new(40000,40000,40000)
	newMover.P = 40000
	newMover.D = 1000
	newMover.Position = part.Position
	newMover.Name = "Mover"
	
	local newRot = Instance.new("BodyGyro")
	newRot.Parent = part
	newRot.MaxTorque = Vector3.new(3000,3000,3000)
	newRot.P = 3000
	newRot.D = 500
	newRot.CFrame = game.Workspace.CurrentCamera.CFrame
	newRot.Name = "RotMover"
	
	local RotOffset = Instance.new("CFrameValue")
	RotOffset.Name = "RotOffset"
	RotOffset.Parent = part
end
 
 
function createDragBall()
	local DragBall = Instance.new("Part")
	DragBall.BrickColor = BrickColor.new("Electric blue")
	DragBall.Material = Enum.Material.Wood
	DragBall.Size = Vector3.new(.2,.2,.2)
	DragBall.Shape = "Ball"
	DragBall.Name = "DragBall"
	DragBall.Parent = workspace
	return DragBall
end
 
 
CAS:BindAction("Grab", Grab, false, Enum.UserInputType.MouseButton1)

I hope this helpfull!

it only moves unanchored parts, i want to move anchored part with my mouse, but the problem is it delays and not smooth

alright, if you made one, just use RenderStepped instead.

A solution would be to create a fast linear tween where the goal is the new CFrame.

1 Like

i need other players can view the part that has been moved by a player, but the problem is, it always delays , i use remote event btw

i think the problem is the remote event is stressing the server alot because i fire the server about many many times, and because of that,it makes a delay and not smooth, so how do i fix this

Tweening on the server isn’t a good idea. The whole thing should be encoded to just positions when it’s transferred from client to server and the LocalScripts should be responsible for tweening the objects.

Oh really? Ok im gonna make another solution for you!

1 Like