دروس تعليمية متوسطة

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

*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. في بداية البرنامج النصي، انسخ والصق عينة الشفرة التالية للحصول على خدمة اللاعبين، ثم في متغير جديد احصل على المستخدم المحلي.

    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 وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.