← Back to Portal Hub

Roblox कस्टम कैमरा इंजीनियरिंग: स्प्रिंग डैम्पिंग, शोल्डर शिफ्ट और स्फीयरकास्ट दीवार सुरक्षा

By DopaBrain Studio Engineering Team • 2026-09-30 • Technical Guide

Roblox का डिफॉल्ट कैमरा साधारण खेलों के लिए ठीक है, लेकिन एक्शन गेम्स में दीवारों से टकराने पर झटके देने लगता है।

CameraType.Scriptable का उपयोग करके और RenderStepped पर कैमरा नियंत्रित करके बेहतरीन सिनेमाई अनुभव दिया जा सकता है। स्प्रिंग डैम्पिंग और स्फीयरकास्ट से स्मूथ कैमरा तैयार होता है।

1. डिफॉल्ट कैमरे की सीमाएं और कस्टम कैमरे की जरूरत

फास्ट-पेस्ड गेम्स में डिफॉल्ट कैमरे की कमियां:

2. सेकंड-ऑर्डर स्प्रिंग फिजिक्स और डैम्पिंग

बिना किसी अवांछित कंपन के स्वाभाविक कैमरा गति:

Luau स्प्रिंग कैमरा कंट्रोलर और स्फीयरकास्ट सुरक्षा
--!strict
local Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")
local UserInputService = game:GetService("UserInputService")
local Players = game:GetService("Players")

local CameraController = {}
local camera = Workspace.CurrentCamera
local player = Players.LocalPlayer
local yaw, pitch = 0, 0
local targetDistance, currentDistance = 12, 12
local springPos, springVel = Vector3.zero, Vector3.zero
local SPHERE_RADIUS = 0.6
local RAY_PARAMS = RaycastParams.new()
RAY_PARAMS.FilterType = RaycastFilterType.Exclude

function CameraController.Init()
    camera.CameraType = Enum.CameraType.Scriptable
    UserInputService.MouseBehavior = Enum.MouseBehavior.LockCenter
    RunService.RenderStepped:Connect(CameraController.Update)
end

function CameraController.Update(dt: number)
    local char = player.Character
    if not char or not char:FindFirstChild("Head") then return end
    local head = char.Head :: BasePart
    RAY_PARAMS.FilterDescendantsInstances = { char }
    
    local focus = CFrame.new(head.Position) * CFrame.Angles(0, yaw, 0) * CFrame.Angles(pitch, 0, 0)
    local force = (Vector3.new(2.2, 1.0, 0) - springPos) * 140 - (springVel * 22)
    springVel += force * dt
    springPos += springVel * dt
    
    local targetPos = (focus * CFrame.new(springPos)).Position - (focus.LookVector * targetDistance)
    local hit = Workspace:Spherecast(head.Position, SPHERE_RADIUS, targetPos - head.Position, RAY_PARAMS)
    local adjDist = targetDistance
    if hit and hit.Instance and hit.Instance.CanCollide then
        adjDist = math.max(1.5, (hit.Position - head.Position).Magnitude - SPHERE_RADIUS)
    end
    currentDistance += (adjDist - currentDistance) * math.min(1, dt * 25)
    camera.CFrame = focus * CFrame.new(springPos) * CFrame.new(0, 0, currentDistance)
end
return CameraController

3. स्फीयरकास्ट द्वारा दीवार पार करने की रोकथाम

दीवारों के आर-पार देखने की समस्या का समाधान:

4. डायनामिक शोल्डर शिफ्ट और निशाना साधना (ADS)

लड़ाई के दौरान दृश्य को बेहतर बनाना:

5. मोबाइल टच जेस्चर और रिस्पॉन्सिव कंट्रोल

मोबाइल और कंसोल पर बेहतरीन गेमप्ले अनुभव:

Frequently Asked Questions

कैमरे के लिए रेकास्ट के बजाय स्फीयरकास्ट क्यों चुनें?

स्फीयरकास्ट एक 3D क्षेत्र की जांच करता है, जिससे कैमरा दीवारों के अंदर नहीं घुसता।

दीवार के पास कैमरे के कंपन को कैसे रोकें?

दूरी में बदलाव को तुरंत न करके धीरे-धीरे स्मूथ करने से कंपन दूर होता है।

क्या इससे मोबाइल फोन पर गेम लैग होगा?

यह गणना प्रति फ्रेम 0.05ms से भी कम समय लेती है, जिससे गेम 60 FPS पर चलता रहता है।

Explore More Interactive Tests & Guides

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

Go to Portal Hub