التحكم في كاميرا المستخدم

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

تمثل رؤية المستخدم للعالم كائن Camera. يمكنك تغيير سلوك الكاميرا لتناسب لعبتك بطرق متنوعة. على سبيل المثال، يمكن أن تتفاعل الكاميرا مع الأحداث في العالم، مثل الاهتزاز عندما يمر وحش، أو أن تكون مقفلة على جانب شخصية المستخدم، كما في الألعاب الجانبية.

إنشاء كاميرا من منظور الشخص الأول

كاميرا من منظور الشخص الأول هي عرض حيث تبقى الكاميرا مقفلة مع رأس الشخصية، مما يجعلها أكثر دقة في الحياة الواقعية. من الشائع استخدامها في ألعاب إطلاق النار والقصص حيث الهدف هو جعل المستخدم يشعر بالانغماس في العالم.

كاميرا من منظور الشخص الأول
كاميرا روبلوكس الكلاسيكية

في الاستوديو، يحتوي كائن StarterPlayer على عدد من الخصائص التي تؤثر على كاميرا المستخدم. تحدد خاصية CameraMode كيفية تصرف الكاميرا.

  1. اختر StarterPlayer.

    alt

  2. قم بتغيير CameraMode إلى LockFirstPerson. يضمن ذلك عدم تحرك كاميرا المستخدم بعيدًا عن رأسه.

    alt

  3. اختبر اللعبة لرؤية كاميرا الشخص الأول في العمل.

إنشاء كاميرا تمرير جانبي

تحتفظ رؤية التمرير الجانبي بالكاميرا في موضع ثابت بالنسبة لجانب الشخصية، مما يعطي العالم شعورًا ثنائي الأبعاد.

alt

برمجة الكاميرا

  1. قم بتوسيع StarterPlayer، وفي StarterPlayerScripts أضف LocalScript باسم CameraManager.

    alt

  2. في أعلى البرنامج النصي، انسخ والصق عينة الكود التالية للحصول على خدمة Players، ثم في متغير جديد احصل على المستخدم المحلي.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
  3. أنشئ دالة تسمى updateCamera. تحتوي هذه الدالة على المنطق اللازم للحصول على وتعيين موضع جديد للكاميرا.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    end
  4. داخل الدالة، احصل على نموذج شخصية المستخدم وتحقق مما إذا كان موجودًا باستخدام عبارة if.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    end
    end

توجيه الكاميرا

تحتوي جميع نماذج الشخصيات على جزء يسمى HumanoidRootPart، والذي يمكن استخدامه للحصول على موضع الشخصية في العالم. هذا يحدد الموضع الذي تشير إليه الكاميرا.

  1. استخدم FindFirstChild للحصول على HumanoidRootPart وتحقق من وجوده باستخدام عبارة if.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    end
    end
    end
  2. موضع HumanoidRootPart هو في الواقع 2 وحدات أسفل رأس المستخدم. لإصلاح ذلك، أضف Vector3 جديد بارتفاع 2 وحدات إلى موضع الجذر.

    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    end
    end
    end

تعيين موضع الكاميرا

تحتاج الكاميرا أيضًا إلى موضع. لإعطاء رؤية المستخدم مظهر تمرير جانبي ثنائي الأبعاد، تحتاج الكاميرا إلى النظر مباشرة إلى جانب الشخصية. ضع الكاميرا على جانب المستخدم عن طريق إضافة عمق إلى محور Z فقط لموضع الكاميرا باستخدام Vector3.

local player = Players.LocalPlayer
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
end
end
end

تحديث CurrentCamera

الآن بعد أن أصبحت المتغيرات لموضع الكاميرا وهدف الكاميرا جاهزة، حان الوقت لتحديث موضع الكاميرا. يمكنك الوصول إلى كاميرا المستخدم من خلال خاصية CurrentCamera في Workspace. تحتوي الكاميرا على خاصية CFrame لتحديد موضعها.

يمكنك استخدام CFrame.lookAt() لتحديث الكاميرا. تأخذ موضعين وتخلق CFrame يقع في الموضع الأول موجهًا نحو الثاني. استخدم CFrame.lookAt() لإنشاء CFrame يتم وضعه في cameraPosition وموجه نحو rootPosition.

local player = Players.LocalPlayer
local camera = workspace.CurrentCamera
local CAMERA_DEPTH = 24
local HEIGHT_OFFSET = 2
local function updateCamera()
local character = player.Character
if character then
local root = character:FindFirstChild("HumanoidRootPart")
if root then
local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
end
end
end

مزامنة الكاميرا

الخطوة الأخيرة هي تشغيل هذه الدالة بشكل متكرر للحفاظ على مزامنة الكاميرا مع المستخدم. الصورة التي يراها المستخدم تتجدد باستمرار. تُسمى اللحظة التي تستغرقها جميع الحسابات اللازمة خطوة العرض.

تجعل RunService:BindToRenderStep() من السهل تنفيذ دالة في كل إطار من خلال قبول هذه المعلمات الثلاث:

  • name - اسم هذا الربط، والذي يجب أن يكون فريدًا حتى لا يتعارض مع وظائف أخرى بنفس الاسم.
  • priority - كلما زاد الرقم، زادت الأولوية. يجب أن تعمل هذه الدالة بعد تحديث الكاميرا الافتراضي في روبلوكس، لذا يتم تعيين الأولوية إلى مستوى أعلى بمقدار 1 من RenderPriority الداخلي للكاميرا.
  • function - الدالة التي سيتم ربطها بخطوة العرض.
  1. استخدم RunService:BindToRenderStep() لربط دالة updateCamera بخطوة العرض.

    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 24
    local HEIGHT_OFFSET = 2
    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = Vector3.new(rootPosition.X, rootPosition.Y, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("SidescrollingCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. اختبر الكود الخاص بك. استخدم مفاتيح A و D لتحريك شخصيتك من جانب إلى آخر.

إنشاء كاميرا إيزومترية

يمكن تعديل الهيكل الأساسي للحصول على موضع المستخدم وتحديث موضع الكاميرا في كل إطار ليتناسب مع العديد من أنماط الكاميرا الأخرى، مثل الكاميرا الإيزومترية. الكاميرا الإيزومترية هي عرض ثلاثي الأبعاد موجه قليلاً لأسفل بزاوية ثابتة نحو شخصية المستخدم.

alt

تعديل الموضع والرؤية

  1. باستخدام الكود من المثال السابق، قم بتعديل cameraPosition لإضافة نفس المقدار إلى جميع الأبعاد الثلاثة.

    alt

    local function updateCamera()
    local character = player.Character
    if character then
    local root = character:FindFirstChild("HumanoidRootPart")
    if root then
    local rootPosition = root.Position + Vector3.new(0, HEIGHT_OFFSET, 0)
    local cameraPosition = rootPosition + Vector3.new(CAMERA_DEPTH, CAMERA_DEPTH, CAMERA_DEPTH)
    camera.CFrame = CFrame.lookAt(cameraPosition, rootPosition)
    end
    end
    end
    RunService:BindToRenderStep("IsometricCamera", Enum.RenderPriority.Camera.Value + 1, updateCamera)
  2. تغيير خاصية FieldOfView للكاميرا يحاكي التكبير والتصغير، مما يمكن أن يعطي العرض مظهرًا أكثر تسطحًا. جرب تعيينها إلى قيمة 20 للتكبير، وزيادة مسافة الكاميرا من المستخدم لتعويض ذلك.

    local Players = game:GetService("Players")
    local RunService = game:GetService("RunService")
    local player = Players.LocalPlayer
    local camera = workspace.CurrentCamera
    local CAMERA_DEPTH = 64
    local HEIGHT_OFFSET = 2
    camera.FieldOfView = 20
    local function updateCamera()

من خلال تغيير سلوك الكاميرا، يمكنك تحقيق مظهر جديد تمامًا للعبتك. تحقق مما إذا كان بإمكانك تغيير cameraPosition لتحقيق كاميرا من الأعلى باستخدام نفس البرنامج النصي. جرب تعديل الإعدادات للحصول على نتيجة تعجبك!

©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.