Roblox Özel Karakter Hareketi: Duvarda Koşma, Tutunma ve VectorForce Fiziği

2026-09-29 • DopaBrain Roblox Fizik Mühendisliği Ekibi • DopaBrain Engineering

Featured DopaBrain Interactive Tools

Duvarda koşma, kayma ve engelleri aşma mekanikleri modern aksiyon oyunlarının temelidir. Bunu yalnızca varsayılan Humanoid ile yapmaya çalışmak takılmalara ve düşmelere yol açar.

Modern Luau kısıtlamaları (`LinearVelocity` ve `VectorForce`) ile yönsel Raycast ışınlarını birleştirerek tüm platformlarda kusursuz çalışan bir hareket sistemi kurabilirsiniz.

1. Akıcı Parkur İçin Humanoid Durumlarını Yönetme

Özel hareket durum makinesi tasarımı:

2. Yönsel Raycast ve Duvar Normali Hizalaması

Koşulabilir yüzeyleri algılama ve yön hesabı:

3. Modern Fizik Kısıtlamaları: LinearVelocity ve VectorForce

Eski BodyMovers yerine modern kısıtlamaları kullanma:

ReplicatedStorage.Controllers.WallRunController
-- İstemci tarafı Duvarda Koşma Denetleyicisi
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. Çıkıntı Algılama ve Yukarı Tırmanma (Mantle)

Kenarlara tutunma ve engeli aşma mekaniği:

5. Mobil Dokunmatik Kontroller ve Sunucu Doğrulaması

Mobil uyumluluk ve hile koruması:

Frequently Asked Questions

Neden BodyVelocity yerine LinearVelocity kullanılmalıdır?

BodyVelocity desteği sonlandırılmış eski bir sistemdir. LinearVelocity modern kısıtlama çözücüsüyle çok daha kararlı ve hatasız çalışır.

Duvarda koşarken aşağı kaymayı nasıl engellersiniz?

VectorForce ile yerçekimini nötrleyecek kadar yukarı yönlü dikey kuvvet uygulayarak.

Duvar boyunca ilerleme vektörü nasıl hesaplanır?

Raycast ile elde edilen yüzey normali ile dünyanın dikey yukarı vektörü (0, 1, 0) arasında çapraz çarpım (Cross Product) yapılarak.

Sunucu duvarda koşma hilelerini nasıl önler?

Oyuncunun yakınında fiziksel bir duvar olduğunu kendi raycast ışınıyla kontrol ederek ve maksimum hızı sınırlandırarak.

Explore More Interactive Tests & Guides

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

Go to Portal Hub