Pergerakan Kustom Roblox: Wall Running, Memanjat Tepian & Fisika VectorForce

2026-09-29 • Tim Rekayasa Fisika Roblox DopaBrain • DopaBrain Engineering

Featured DopaBrain Interactive Tools

Wall running, berseluncur, dan memanjat tepian memberi sensasi aksi yang luar biasa dalam game modern. Mencoba membuatnya hanya dengan status Humanoid bawaan sering kali memicu tabrakan kaku dan jatuh mendadak.

Menggabungkan batasan fisika Luau (`LinearVelocity` dan `VectorForce`) dengan deteksi Raycast memungkinkan Anda membangun sistem parkour sekelas game konsol di semua perangkat.

1. Mengatur Ulang Status Humanoid untuk Parkour Mulus

Prinsip state machine pergerakan kustom:

2. Raycast Arah dan Penyelarasan Vektor Normal Dinding

Mendeteksi permukaan dinding dan arah pergerakan:

3. Batasan Fisika Modern: LinearVelocity & VectorForce

Menggantikan BodyMovers lama dengan constraint modern:

ReplicatedStorage.Controllers.WallRunController
-- Pengontrol Wall Running Klien
local RunService = game:GetService("RunService")
local WallRun = {}
WallRun.__index = WallRun

function WallRun.new(character)
    local self = setmetatable({}, WallRun)
    self.Char = character
    self.RootPart = character:WaitForChild("HumanoidRootPart")
    self.Humanoid = character:WaitForChild("Humanoid")
    
    local att = Instance.new("Attachment", self.RootPart)
    local lv = Instance.new("LinearVelocity")
    lv.Attachment0 = att
    lv.MaxForce = 15000
    lv.RelativeTo = Enum.ActuatorRelativeTo.World
    lv.Enabled = false
    lv.Parent = self.RootPart
    
    self.Attachment = att
    self.LinearVelocity = lv
    self.IsRunning = false
    return self
end

function WallRun:CheckWall(side)
    local rightVec = self.RootPart.CFrame.RightVector
    local rayDir = (side == "Left" and -rightVec or rightVec) * 3.5
    local params = RaycastParams.new()
    params.FilterDescendantsInstances = {self.Char}
    params.FilterType = Enum.RaycastFilterType.Exclude
    return workspace:Raycast(self.RootPart.Position, rayDir, params)
end

function WallRun:Start(hitNormal, forwardDir)
    self.IsRunning = true
    self.LinearVelocity.VectorVelocity = forwardDir * 32 + Vector3.new(0, 4, 0)
    self.LinearVelocity.Enabled = true
    self.Humanoid:ChangeState(Enum.HumanoidStateType.Physics)
end

function WallRun:Stop()
    self.IsRunning = false
    self.LinearVelocity.Enabled = false
    self.Humanoid:ChangeState(Enum.HumanoidStateType.Freefall)
end

return WallRun

4. Deteksi Tepian dan Gerakan Naik (Mantle)

Meraih bibir tebing dan transisi naik yang mulus:

5. Kontrol Layar Sentuh & Validasi Server

Aksesibilitas mobile dan keamanan anti-cheat:

Frequently Asked Questions

Mengapa harus menggunakan LinearVelocity daripada BodyVelocity?

BodyVelocity sudah usang. LinearVelocity adalah bagian dari mesin constraint baru Roblox yang lebih stabil dan menghitung massa secara akurat.

Bagaimana agar pemain tidak merosot ke bawah saat wall running?

Berikan gaya ke atas melalui VectorForce yang menyeimbangkan gravitasi ruang kerja selama beberapa detik.

Bagaimana cara menghitung vektor dorongan di sepanjang dinding?

Gunakan perkalian silang (Cross Product) antara vektor normal dinding hasil raycast dan vektor atas dunia (0, 1, 0).

Bagaimana server mencegah cheat terbang saat wall run?

Server memverifikasi keberadaan dinding secara independen dan membatasi kecepatan gerak maksimal karakter.

Explore More Interactive Tests & Guides

Discover personalized cognitive assessments, stress evaluations, and game psychology tools on DopaBrain.

Go to Portal Hub