Scripting Helpers is winding down operations and is now read-only. More info→
Ad
Log in to vote
0

When on impact with wall, I get flinged? (Wallrun Script)

Asked by 1 year ago

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.

Answer this question