Smooth PathfindingService Turns

How would i make PathfindingService not take such sharp turns around obstacles?
I want it to be smooth because it just looks weird and unnatural when it goes 90 degrees instantly around a turn.

: /‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎ ‎

local PathfindingService = game:GetService("PathfindingService")
local Workspace = game:GetService("Workspace")

-- Hedef konumu
local targetPosition = Vector3.new(10, 0, 10)

-- Başlangıç konumu (örneğin, karakterin konumu)
local startPosition = Vector3.new(0, 0, 0)

-- Pathfinding özelliklerini ayarla
local path = PathfindingService:CreatePath({
    AgentRadius = 2,  -- Karakterin boyutuna uygun bir yarıçap ayarlayın
    AgentHeight = 5,  -- Karakterin boyutuna uygun bir yükseklik ayarlayın
    AgentCanJump = false, -- Karakterin zıplayıp zıplamayacağını belirleyin
    AgentJumpHeight = 0, -- Karakterin zıplama yüksekliğini belirleyin
    AgentMaxSlope = 45, -- Karakterin tırmanabileceği maksimum eğimi belirleyin
})

-- Yolu hesapla
path:ComputeAsync(startPosition, targetPosition)

-- Yolu al
local waypoints = path:GetWaypoints()

-- Karakterin takip edeceği pürüzsüz bir yol oluştur
local smoothPath = {}
for i = 1, #waypoints do
    local point = waypoints[i].Position
    local nextPoint = waypoints[i + 1] and waypoints[i + 1].Position
    if nextPoint then
        local direction = (nextPoint - point).Unit
        local distance = (nextPoint - point).Magnitude
        local count = math.ceil(distance / 5)  -- Yol noktalarının arasındaki mesafeyi ayarlayın
        for j = 1, count do
            table.insert(smoothPath, point + direction * (distance / count * j))
        end
    else
        table.insert(smoothPath, point)
    end
end

-- Karakterin takip edeceği pürüzsüz yolu kullanarak karakteri hareket ettirin
local function moveCharacterSmoothly(character, path)
    local currentPositionIndex = 1
    
    while currentPositionIndex <= #path do
        local currentTarget = path[currentPositionIndex]
        local distance = (currentTarget - character.PrimaryPart.Position).Magnitude
        
        -- Karakterin hedefe doğru hareket etmesi için kodu buraya ekleyin
        -- Örneğin: character:SetPrimaryPartCFrame(CFrame.new(currentTarget))
        
        -- Karakter hedefe ulaştıysa bir sonraki hedefe geç
        if distance < 0.5 then
            currentPositionIndex = currentPositionIndex + 1
        end
        
        wait(0.1)  -- Karakterin yavaşça hareket etmesi için bir bekleme ekleyin
    end
end

-- Pürüzsüz yolu kullanarak karakteri hareket ettirin
moveCharacterSmoothly(game.Players.LocalPlayer.Character, smoothPath)

2 Likes