What should I use to make a rail grinding system?

Hey devs! :smile:

I want to know what to use to make a rail grinding system, just like in Sonic the Hedgehog.

Here is an example of it:

image

I really don’t need scripts, i just need someone to tell me what i should use to make this.

thanks for replying on this post!
talk to ya’ soon!

For the effects behind the character, you could create a ParticleEmitter and then CFrame the character in the correct direction down the rail until they jump off of it (you can decide what to do for that.)

You could also look into Tweening the character down the rail and then stopping the tween when they get to the bottom. Hope this helps!

2 Likes

i might try this out later, thanks for the reply!

heres a cookie! :cookie:

1 Like

Thank you that cookie was delish. :stuck_out_tongue:

1 Like

it came out well! i might make a V2, but this is the result of the rail grinding right now…

robloxapp-20210719-2155006.wmv (3.3 MB)

Thank you so much, I am glad it helped you! :smiley:

It looks great! I am curious to see exactly what you did and maybe I could give a few pointers, but could you share with me the rail grinding file or the code you used?

1 Like

sorry for responding late, but sure.

this is what i did:

local character = script.Parent
local humanoid = character:WaitForChild("Humanoid")

local rightgrind = humanoid:LoadAnimation(script:WaitForChild("Grind1"))
local leftgrind = humanoid:LoadAnimation(script:WaitForChild("Grind2"))

local cf1 = CFrame.new(workspace.Parts.Part1.Position)
local cf2 = CFrame.new(workspace.Parts.Part2.Position)
local cf3 = CFrame.new(workspace.Parts.Part3.Position)
local cf4 = CFrame.new(workspace.Parts.Part4.Position)
local cf5 = CFrame.new(workspace.Parts.Part5.Position)
local cf6 = CFrame.new(workspace.Parts.Part6.Position)
local cf7 = CFrame.new(workspace.Parts.Part7.Position)

humanoid.Touched:Connect(function(part)
    if part.Name == "PartTouch1" then
	if humanoid then
		humanoid.WalkSpeed = 0
		rightgrind:Play()
		character:WaitForChild("HumanoidRootPart").CFrame = cf1
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf2
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf3
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf4
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf5
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf7
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf6
		rightgrind:Stop()
		humanoid.WalkSpeed = 1
	end  
end
end)

 humanoid.Touched:Connect(function(part)
if part.Name == "PartTouch2" then                                                                       
          if humanoid then
		humanoid.WalkSpeed = 0
		leftgrind:Play()
		character:WaitForChild("HumanoidRootPart").CFrame = cf6
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf7
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf5
		wait(.2)
		character:WaitForChild("HumanoidRootPart").CFrame = cf4
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf3
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf2
		wait(.1)
		character:WaitForChild("HumanoidRootPart").CFrame = cf1
		leftgrind:Stop()
		humanoid.WalkSpeed = 1
	end  
end
end)