Player not sticking to part

So i’m making a rotating part but when a player goes on it it just passes and leaves him behind.
How to make it so that it takes the player with you and not just pass and leave him

Script I used:

while wait() do
	script.Parent.CFrame = script.Parent.CFrame * CFrame.fromEulerAnglesXYZ(0, .01, 0)

So you want the player to move with the moving part when the player jumps on it? If you want it to work like that I might have a script that can fix this. I got this script from a tutorial.

  1. firstly make a Local Script and put this script (watch below) inside it and then put the Local Script into the StarterCharacterScripts.
local Players = game:GetService("Players")
local player = game.Players.LocalPlayer
local RunService = game:GetService('RunService')

local CheckStates = true
local LastPartCFrame
local LastPart
local Function
local Function2
function CFrameLogic(Raycast, CFramePart)
	--------------------------------------------------------------- MOVE PLAYER TO NEW POSITON FROM OLD POSITION
	if Raycast.Instance ~= LastPart then
		LastPart = Raycast.Instance
		LastPartCFrame = nil
	local Train = Raycast.Instance
	if LastPartCFrame == nil then -- If no LastTrainCFrame exists, make one!
		LastPartCFrame = Train.CFrame -- This is updated later.
	local TrainCF = Train.CFrame
	local Rel = TrainCF * LastPartCFrame:inverse()
	LastPartCFrame = Train.CFrame -- Updated here.
	CFramePart.CFrame = Rel * CFramePart.CFrame -- Set the player's CFrame
Function = RunService.Heartbeat:Connect(function()
	--------------------------------------------------------------- CHECK PLATFORM BELOW
	-- Build a "RaycastParams" object
	local MovingObjects = workspace.MovingObjects --Make a folder and put all moving objects into it and call the folder "MovingObjects"
	local HumanoidRootPart = player.Character.HumanoidRootPart
	local humanoid = player.Character.Humanoid
	local raycastParams =
	raycastParams.FilterType = Enum.RaycastFilterType.Whitelist
	raycastParams.FilterDescendantsInstances = {MovingObjects}
	raycastParams.IgnoreWater = true

	-- Cast the ray
	local Hit = workspace:Raycast(HumanoidRootPart.CFrame.p,,-50,0), raycastParams) --Casts a ray facing down
	if Hit and Hit.Instance:IsDescendantOf(MovingObjects) then -- Check if the ray hits and if it hits an object inside of MovingObjects
		if CheckStates then -- check if the character is jumping
			if humanoid:GetState() == Enum.HumanoidStateType.RunningNoPhysics or humanoid:GetState() == Enum.HumanoidStateType.Running or humanoid:GetState() == Enum.HumanoidStateType.Landed or humanoid:GetState() == Enum.HumanoidStateType.PlatformStanding or humanoid:GetState() == Enum.HumanoidStateType.Seated or humanoid:GetState() == Enum.HumanoidStateType.GettingUp or humanoid:GetState() == Enum.HumanoidStateType.None or humanoid:GetState() == Enum.HumanoidStateType.Physics or humanoid:GetState() == Enum.HumanoidStateType.Ragdoll or humanoid:GetState() == Enum.HumanoidStateType.Dead then
				CFrameLogic(Hit, HumanoidRootPart)
				LastPartCFrame = nil -- Clear the value when the player gets off.
			CFrameLogic(Hit, HumanoidRootPart)
		LastPartCFrame = nil -- Clear the value when the player gets off.
	Function2 = player.Character.Humanoid.Died:Connect(function()
		Function:Disconnect() -- Stop memory leaks
		Function2:Disconnect() -- Stop memory leaks
  1. Create a Folder called MovingObjects in the Workspace and then put your moving objects into the folder.

After that it should work.

That’s really so much but thank u…I actually reviewed a post 5 minutes ago speaking about AssemblyAngularVelocity and so I thought I would try it and it did what i wanted it but 1 problem is making it set the speed as the same speed of the rotation…got any idea?

1 Like

To be honest I dont really know much about Velocities and other stuff like that. But you can try my solution its supposed to work for anything you put inside the folder.

Here’s a video how it works for me:

(The part moves by a diffrent script. The script I showed above is only supposed to take the player with the part.)

1 Like