I am creating a Wallrun Script. This script will allow players to hold onto walls and move in the X direction swiftly.
To achieve this effect, I am using a Prismatic Constraint and Setting the Humanoid's State Type to physics, so the process cannot be interrupted by any other type of state.
Mostly the problem is based on the Attachment1 Placement.
Currently, I'm setting Attachment1's World Position to this: att2.WorldPosition = rayres.Instance.Position * Vector3.new(rayres.Instance.Size.X + (rayres.Instance.Size.X / 2),0,0)
This is to make sure that Attachment1 can end at the edge of the part.
Obviously, this doesn't work. Here is my code, test it out for your self and you'll see what I mean.
local left = nil
local right = nil
local isWallrunning = nil
local RunService = game:GetService('RunService')
local RunServ = game:GetService("RunService")
local RootPart = script.Parent:WaitForChild("HumanoidRootPart")
local rayP = RaycastParams.new()
rayP.FilterDescendantsInstances = {script.Parent, workspace.Baseplate}
rayP.FilterType = Enum.RaycastFilterType.Blacklist
RunService.Heartbeat:Connect(function(dt)
local origin = RootPart.Position
local direction = RootPart.CFrame.RightVector * 3
local rayres = workspace:Raycast(origin, direction, rayP)
if rayres and left ~= true then
right = true
if rayres.Instance == workspace.Baseplate then
return
end
local PrismaticConstraint = Instance.new('PrismaticConstraint')
local att1 = Instance.new('Attachment')
local att2 = Instance.new('Attachment')
PrismaticConstraint.Parent = RootPart
RootPart.Parent.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
att1.Parent = RootPart
att2.Parent = rayres.Instance
att2.WorldPosition = rayres.Instance.Position * Vector3.new(rayres.Instance.Size.X + (rayres.Instance.Size.X / 2),0,0)
PrismaticConstraint.Attachment0 = att1
PrismaticConstraint.Attachment1 = att2
end
end)
I've been stuck on this part for about 2 hours, I'm just so confused.
By the way, I'm testing this in Studio, and with R15.
