ระบบการกระทำการป้อนข้อมูล

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ระบบการกระทำการป้อนข้อมูลข้ามแพลตฟอร์ม Input Action System ช่วยให้คุณเชื่อมต่อ การกระทำ และจัดเรียง การผูกขาด ข้ามอุปกรณ์ฮาร์ดแวร์ต่างๆ ในระหว่างการแก้ไข ร่วมกับ บริบท คุณสามารถกำหนดค่าและแก้ไขระบบการป้อนข้อมูลแบบโมดูลาร์ที่ทำงานบนอุปกรณ์ใดก็ได้ในทุกช่วงของการเล่น กรณีการใช้งานรวมถึง:

  • ระบบการยิงมุมมองบุคคลที่หนึ่งที่มีการกระทำสลับกันอย่างไดนามิกขึ้นอยู่กับว่าผู้เล่นอยู่ในโหมดต่อสู้หรือโหมดผู้ชม
  • ระบบการขับขี่ที่ครอบคลุมซึ่งมีการเร่ง/ชะลอ การเพิ่มความเร็วของรถยนต์ และสถานีเติมน้ำมัน
  • คีย์ลัดสำหรับระบบความสามารถในเกมต่อสู้เพื่อสลับการเคลื่อนไหวได้อย่างราบรื่นโดยไม่ให้ผู้เล่นพลาดการโจมตี

บริบทการป้อนข้อมูล

InputContext คือการรวบรวมการกระทำซึ่งถือ การกระทำการป้อนข้อมูล ที่เกี่ยวข้อง เช่น PlayContext สำหรับการควบคุมตัวละครในเกมและ NavContext สำหรับการควบคุมการนำทางรอบเมนู UI คุณสามารถ เปิด/ปิดบริบท (และการกระทำที่เกี่ยวข้อง) ผ่านคุณสมบัติ Enabled ของพวกเขา เช่น การเปิด NavContext เมื่อเมนูสินค้าคงคลังเปิดอยู่และจากนั้นเปลี่ยนไปที่ PlayContext เมื่อผู้เล่นปิดเมนูและกลับไปที่การเล่นหลัก

แม้ว่าเกมอาจไม่ใช้หลายบริบทการป้อนข้อมูลในตอนแรก แต่แนะนำให้สร้างบริบทหลักที่ระดับสูงสุดของระบบการป้อนข้อมูลใดๆ เช่น อินสแตนซ์ PlayContext สำหรับการป้อนข้อมูลที่เกิดขึ้นระหว่างการเล่นเกม

  1. แนะนำ
    สร้าง Folder ชื่อ Inputs ภายใน ReplicatedStorage เพื่อเก็บบริบทการป้อนข้อมูลต่างๆ

    โฟลเดอร์ใหม่ภายใน ReplicatedStorage เปลี่ยนชื่อเป็น Inputs
  2. แทรก InputContext ใหม่ลงในโฟลเดอร์และเปลี่ยนชื่อเป็น PlayContext

    อินสแตนซ์ InputContext ใหม่ภายใน ReplicatedStorage เปลี่ยนชื่อเป็น PlayContext
  3. ไม่บังคับ
    ในหน้าต่าง คุณสมบัติ ตั้งค่า Priority เป็น 2000 และเปิดใช้งาน Sink บริบทที่เปิดใช้งาน Sink จะใช้เหตุการณ์การป้อนข้อมูลสำหรับ KeyCodes ที่ผูกไว้ที่ระดับความสำคัญของมัน โดยบล็อกการป้อนข้อมูลเหล่านั้นไม่ให้ไปถึงบริบทที่มีความสำคัญต่ำกว่า สิ่งนี้มีประโยชน์สำหรับกรณีการใช้งานเช่นหน้าจอสินค้าคงคลังที่ควรจะปิดกั้นการป้อนข้อมูลการเล่นเกมเฉพาะในขณะที่เปิดอยู่ ในตัวอย่างนี้ PlayContext จะได้รับ Priority ที่สูงพอที่จะปิดกั้นการป้อนข้อมูลที่ผูกไว้ก่อนที่บริบท PlayerScripts เริ่มประมวลผล

    InputContext ที่ตั้งค่า Priority เป็น 2000 และเปิดใช้งาน Sink

การกระทำการป้อนข้อมูล

InputAction กำหนดกลไกการกระทำการเล่นเกมเช่น "กระโดด" "วิ่ง" หรือ "ยิง" การกระทำเหล่านี้จะถูกแมพไปยังการป้อนข้อมูลฮาร์ดแวร์โดยใช้ การผูกขาดการป้อนข้อมูล

InputAction สามารถมีหลายรูปแบบขึ้นอยู่กับคุณสมบัติ Type (Enum.InputActionType) ค่าเริ่มต้นคือ Bool ซึ่งออกแบบมาเพื่อรับค่า true/false จากการกด/ปล่อยของการป้อนข้อมูลเช่น ButtonA, E, หรือ MouseLeftButton

ประเภทการกระทำการป้อนข้อมูลการใช้งานตัวอย่าง
Boolการกระทำที่ถูกกระตุ้นเช่นกระโดด ยิง วิ่ง ฯลฯ โดยสนับสนุนเกณฑ์การกด/ปล่อยบนการป้อนข้อมูลอนาล็อก
Direction1Dการกระทำที่มีค่าตั้งแต่ศูนย์ถึงเต็ม เช่น แป้นเหยียบเร่งของรถยนต์หรือระดับการซูมของกล้อง
Direction2Dการเคลื่อนไหวในทิศทาง 2D เช่น การหมุนกล้อง หรือการเคลื่อนไหวของตัวละคร Roblox มาตรฐาน
Direction3Dการเคลื่อนไหวในทิศทาง 3D เช่น ยานพาหนะที่อยู่ในอากาศซึ่งสามารถลอยขึ้น/ลง เร่ง/ชะลอ และเลี้ยวซ้าย/ขวา
ViewportPositionพิกัด 2D ของ viewport เช่น การป้อนข้อมูลจากเมาส์ เช่น สำหรับตัวชี้ที่กำหนดเองหรือการเรย์แคสเพื่อเลือกวัตถุในโลก

ในการทดสอบ InputAction สำหรับการวิ่งของตัวละครอย่างง่าย:

  1. แนะนำ
    เลือกวัตถุ Workspace ระดับสูงสุดใน Explorer และจากนั้นในหน้าต่าง คุณสมบัติ ตั้งค่า PlayerScriptsUseInputActionSystem เป็น Enabled

  2. สร้าง InputAction ใหม่ภายในบริบท PlayContext ภายใน ReplicatedStorage เปลี่ยนชื่อเป็น CharacterSprint เพื่อระบุการกระทำที่เฉพาะเจาะจง

    อินสแตนซ์ InputAction ใหม่ภายใน InputContext เปลี่ยนชื่อเป็น CharacterSprint
  3. ในหน้าต่าง คุณสมบัติ สังเกตว่าคุณสมบัติ Type ของการกระทำคือ Bool (ค่าเริ่มต้น) นี่เป็นประเภทที่เหมาะสมสำหรับการวิ่งของตัวละครอย่างง่ายในฐานะการกระทำ boolean true/false (ตัวละครกำลังวิ่งหรือไม่วิ่ง)

    คุณสมบัติ Type ของ InputAction ตั้งค่าเป็น Bool

การผูกขาดการป้อนข้อมูล

InputBinding กำหนดว่าการผูกขาดฮาร์ดแวร์ใดควรกระตุ้น InputAction หลัก เช่น การกดปุ่ม การกดปุ่มเกม หรือการแตะบนอุปกรณ์ที่รองรับการสัมผัส สำหรับความเข้ากันได้ ข้ามแพลตฟอร์ม InputAction แต่ละตัวควรมี InputBinding สำหรับ เกมแพด, คีย์บอร์ด/เมาส์, และ สัมผัส ตามที่แสดงที่นี่

Roblox มีการควบคุมการป้อนข้อมูลเริ่มต้นสำหรับการเคลื่อนไหว การควบคุมกล้อง และการโต้ตอบกับสภาพแวดล้อมพื้นฐาน — ผู้เล่น Roblox คุ้นเคยกับการควบคุมเหล่านี้ ดังนั้นคุณควรเปลี่ยนแปลงเฉพาะในกรณีเฉพาะ นอกจากนี้ โปรดทราบว่าการป้อนข้อมูล ที่จองไว้ ไม่สามารถเปลี่ยนแปลงได้และจะทำงานตามวัตถุประสงค์ที่ตั้งใจไว้เสมอ

การกระทำเมาส์/คีย์บอร์ดเกมแพดสัมผัส
เปิดเมนู RobloxEscปุ่มเริ่ม (ButtonStart)ไม่สามารถใช้ได้
คอนโซลนักพัฒนาF9ไม่สามารถใช้ได้ไม่สามารถใช้ได้
โหมดเต็มหน้าจอ (Windows)
แสดงเดสก์ท็อป (Mac)
F11ไม่สามารถใช้ได้ไม่สามารถใช้ได้
บันทึกวิดีโอ (Windows)F12ไม่สามารถใช้ได้ไม่สามารถใช้ได้
ถ่ายภาพหน้าจอPrintScreenไม่สามารถใช้ได้ไม่สามารถใช้ได้

ประเภท Type ที่กำหนดให้กับ InputAction หลักจะส่งผลโดยตรงต่อประเภทการป้อนข้อมูลทั่วไป (กุญแจ/ปุ่ม/แตะ, ทริกเกอร์อนาล็อก, แท่งนิ้ว ฯลฯ) ที่ถูกต้องสำหรับอินสแตนซ์ InputBinding ย่อย ในทางกลับกัน ค่าที่ส่งไปยังเหตุการณ์ที่เชื่อมต่อกับการกระทำหลักขึ้นอยู่กับประเภทการป้อนข้อมูลที่เลือก ดู เหตุการณ์การป้อนข้อมูล สำหรับรายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างประเภทการกระทำ การผูกขาด และค่าที่ส่งกลับ

ในการเชื่อมโยงการผูกขาดสำหรับการวิ่งของตัวละครอย่างง่าย:

  1. แทรก InputBinding ใหม่ลงในการกระทำ CharacterSprint และเปลี่ยนชื่อเป็น KeyboardBinding จากนั้นตั้งค่า KeyCode ของการผูกขาดเป็น LeftShift

  2. แทรก InputBinding ที่สองลงในการกระทำ CharacterSprint และเปลี่ยนชื่อเป็น GamepadBinding จากนั้นตั้งค่า KeyCode ของการผูกขาดเป็น ButtonY

  3. ภายใน ScreenGui คอนเทนเนอร์ภายใน StarterGui สร้าง ปุ่มบนหน้าจอ เปลี่ยนชื่อเป็น SprintButton และ จัดตำแหน่ง/ปรับขนาด ตามต้องการ

  4. แทรก InputBinding ที่สามลงในการกระทำ CharacterSprint และเปลี่ยนชื่อเป็น TouchBinding จากนั้นในหน้าต่าง คุณสมบัติ เชื่อมโยง UIButton ของการผูกขาดกับปุ่ม SprintButton ที่คุณสร้างขึ้นก่อนหน้านี้ภายใน StarterGui

เหตุการณ์การป้อนข้อมูล

อินสแตนซ์ InputAction มี เหตุการณ์ ในตัวสามตัวเพื่อจัดการการป้อนข้อมูลของผู้เล่นที่มาจาก InputBindings

  • Pressed — เหตุการณ์นี้จะเกิดขึ้นเฉพาะเมื่อ Type ของการกระทำการป้อนข้อมูลถูกตั้งค่าเป็น Bool และเฉพาะเมื่อสถานะเปลี่ยนจาก false เป็น true
  • Released — เหตุการณ์นี้จะเกิดขึ้นเฉพาะเมื่อ Type ของการกระทำการป้อนข้อมูลถูกตั้งค่าเป็น Bool และเฉพาะเมื่อสถานะเปลี่ยนจาก true เป็น false
  • StateChanged — เหตุการณ์นี้จะเกิดขึ้นสำหรับประเภทการกระทำการป้อนข้อมูลทั้งหมดเมื่อใดก็ตามที่สถานะเปลี่ยน ยกเว้นถ้าสถานะพยายามเปลี่ยนไปยังสถานะเดียวกัน

ขึ้นอยู่กับ Type ของการกระทำการป้อนข้อมูล (Bool, Direction1D, Direction2D, Direction3D, หรือ ViewportPosition) และประเภทการป้อนข้อมูลทั่วไปที่มาจาก InputBinding ย่อย (กุญแจ/ปุ่ม/แตะ, ทริกเกอร์อนาล็อก, แท่งนิ้ว ฯลฯ) ค่าที่แตกต่างกันจะถูกส่งกลับไปยังตัวจัดการเหตุการณ์ Pressed, Released, และ StateChanged ตรวจสอบตารางต่อไปนี้เพื่อทำความเข้าใจความสัมพันธ์ให้ดีขึ้น

ประเภท Bool เหมาะที่สุดสำหรับการกระทำที่ถูกกระตุ้นเช่นกระโดด ยิง วิ่ง ฯลฯ โดยสนับสนุนเกณฑ์การกด/ปล่อยบนการป้อนข้อมูลอนาล็อก

ประเภทการป้อนข้อมูลที่ถูกต้องบน InputBindingsส่งกลับไปยังเหตุการณ์ InputAction
การป้อนข้อมูล Boolean จากปุ่มคีย์บอร์ดหรือปุ่มเมาส์/เกมพื้นฐานผ่านคุณสมบัติ KeyCode ของการผูกขาด หรือการกด/ปล่อย GuiButton ผ่านคุณสมบัติ UIButton ของการผูกขาด
  • เหตุการณ์ Pressed:
    • true เมื่อกด
  • เหตุการณ์ Released:
    • true เมื่อปล่อย
  • เหตุการณ์ StateChanged:
    • true (กด) หรือ false (ปล่อย)
จำนวนการป้อนข้อมูลที่แปรผันจากการป้อนข้อมูลอนาล็อกเช่นทริกเกอร์เกมพื้น (ButtonL2/ButtonR2) ผ่านคุณสมบัติ KeyCode ของการผูกขาด

ในการเชื่อมต่อเหตุการณ์สำหรับการวิ่งของตัวละครอย่างง่าย:

  1. แทรก Script ใหม่ลงในต้นไม้ CharacterSprint ข้างการผูกขาดการป้อนข้อมูลต่างๆ จากนั้นตั้งค่า RunContext เป็น Client และเปลี่ยนชื่อเป็น OnActivate

  2. วางโค้ดต่อไปนี้ลงในสคริปต์ OnActivate โปรดทราบการเชื่อมต่อเหตุการณ์ Pressed ในบรรทัด 1315 ซึ่งจะเพิ่มความเร็วในการเดินของตัวละครเป็นสองเท่าเมื่อมีการกดการผูกขาดการวิ่ง และการเชื่อมต่อเหตุการณ์ Released ที่สอดคล้องกันในบรรทัด 1618 ซึ่งจะรีเซ็ตความเร็วในการเดินเป็นค่าเริ่มต้นเมื่อมีการปล่อยการผูกขาดการวิ่ง

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
  3. ทดสอบเกมของคุณและทดสอบการกระทำการวิ่งของตัวละครด้วย การผูกขาด ที่คุณเลือกก่อนหน้านี้: LeftShift สำหรับคีย์บอร์ด, ButtonY สำหรับเกมแพด, และปุ่ม SprintButton บนหน้าจอสำหรับอุปกรณ์ที่รองรับการสัมผัส จำไว้ว่าคุณสามารถใช้ Controller Emulator เพื่อลองการป้อนข้อมูลจากเกมแพดโดยตรงใน Roblox Studio

การเปลี่ยนบริบท

เมื่อคุณมี บริบทการป้อนข้อมูล เช่น PlayContext คุณสามารถเปิด/ปิดในระหว่างการเล่นเกมผ่านการเขียนสคริปต์ เปลี่ยน Priority เพื่อกำหนดว่าการกระทำใดมีความสำคัญเหนือกว่า และ Sink การป้อนข้อมูลจากการประมวลผลภายในบริบทที่มีความสำคัญต่ำกว่า

  1. เพื่อให้ง่ายต่อการสลับบริบทจากสคริปต์อื่นๆ ให้แทรก BindableEvent ใหม่ลงในโฟลเดอร์การป้อนข้อมูลของคุณภายใน ReplicatedStorage และเปลี่ยนชื่อเป็น ContextEvent

  2. สร้าง Script ใหม่ที่ระดับเดียวกัน ตั้งค่า RunContext เป็น Client และเปลี่ยนชื่อเป็น UpdateContext

  3. ภายในสคริปต์ UpdateContext ให้วางโค้ดต่อไปนี้:

    UpdateContext (Client Script)
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    -- เชื่อมต่อเหตุการณ์ที่สามารถผูกได้
    contextEvent.Event:Connect(function(targetContext, enabled)
    local context = inputsFolder:FindFirstChild(targetContext)
    if context then
    context.Enabled = enabled
    print(context.Name .. ": " .. tostring(context.Enabled))
    else
    warn("ไม่พบ InputContext!")
    end
    end)
  4. เมื่อมีสคริปต์ UpdateContext อยู่ในที่นั้น คุณสามารถอัปเดต InputContext ที่มีชื่อได้โดยการเรียกเหตุการณ์ที่สามารถผูกได้ เช่น จาก LocalScript ที่ควบคุม GuiButton ภายในคอนเทนเนอร์ ScreenGui

    Button Script
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")
    local contextEvent = inputsFolder:WaitForChild("ContextEvent")
    local button = script.Parent
    button.Activated:Connect(function()
    -- เรียกเหตุการณ์ที่สามารถผูกได้ด้วยบริบทการป้อนข้อมูลเป้าหมายและสถานะที่เปิดใช้งาน
    contextEvent:Fire("PlayContext", true)
    end)

ผู้จัดการการกระทำการป้อนข้อมูล

เครื่องมือ Input Action Manager เป็นอินเทอร์เฟซแบบแมทริกซ์ที่รวมกันเพื่อออกแบบ ตรวจสอบ และขยายสถาปัตยกรรมการป้อนข้อมูลของคุณ

ในการเข้าถึง ให้ไปที่เมนู Window ใน Studio และเลือก Input ⟩ Input Action Manager หากเกมของคุณใช้ บริบท การกระทำ หรือ การผูกขาด อยู่แล้ว ผู้จัดการจะสแกน DataModel โดยอัตโนมัติและดึงอินสแตนซ์ที่มีอยู่เหล่านั้นเข้าสู่กริดของตัวแก้ไข อินสแตนซ์ที่เกี่ยวข้องกับการป้อนข้อมูลใหม่จะถูกเพิ่มโดยอัตโนมัติในโฟลเดอร์ Inputs ภายใน ReplicatedStorage

โฟลเดอร์ภายใน ReplicatedStorage ชื่อ Inputs

ในการกำหนดค่าการตั้งค่าการป้อนข้อมูลสำหรับ การวิ่งของตัวละคร ตามที่อธิบายไว้ในส่วนข้างต้น:

  1. แนะนำ
    เลือกวัตถุ Workspace ระดับสูงสุดใน Explorer และจากนั้นในหน้าต่าง คุณสมบัติ ตั้งค่า PlayerScriptsUseInputActionSystem เป็น Enabled

  2. ภายในคอนเทนเนอร์ ScreenGui ภายใน StarterGui สร้าง ปุ่มบนหน้าจอ เปลี่ยนชื่อเป็น SprintButton และ จัดตำแหน่ง/ปรับขนาด ตามต้องการ

  3. ใน Input Action Manager ให้ชี้ไปที่ส่วนหัวคอลัมน์ Context และคลิกปุ่ม ป้อนชื่อที่เหมาะสมสำหรับบริบทใหม่ เช่น PlayContext และกด Enter จะมี InputContext ที่มีชื่อที่ตรงกันปรากฏใน ReplicatedStorage

    อินสแตนซ์ InputContext ใหม่ภายใน ReplicatedStorage ชื่อ PlayContext
  4. ชี้ไปที่บริบทใหม่และคลิกปุ่ม จากเมนูป๊อปอัป เลือก Bool ป้อน CharacterSprint สำหรับชื่อของการกระทำและกด Enter จะมี InputAction ที่มีชื่อที่ตรงกันปรากฏอยู่ภายใต้บริบท

    อินสแตนซ์ InputAction ใหม่ภายใน InputContext ชื่อ CharacterSprint
  5. ในแถว CharacterSprint ใหม่ ให้กำหนดการผูกขาดสำหรับแต่ละประเภทการป้อนข้อมูล:

    1. คีย์บอร์ดและเมาส์ — คลิกปุ่มลูกศรและเลือก LeftShift จากเมนูตัวเลือก
    2. สัมผัส — คลิกเซลล์และจากนั้นในลำดับชั้น Explorer คลิกวัตถุ SprintButton ที่คุณสร้างขึ้นก่อนหน้านี้ใน ScreenGui
    3. เกมแพด — คลิกปุ่มลูกศรและเลือก ButtonY จากเมนูตัวเลือก
  6. แทรก Script ใหม่ลงในต้นไม้ CharacterSprint ข้างการผูกขาดการป้อนข้อมูลต่างๆ จากนั้นตั้งค่า RunContext เป็น Client และเปลี่ยนชื่อเป็น OnActivate

  7. วางโค้ดต่อไปนี้ลงในสคริปต์ OnActivate โปรดทราบการเชื่อมต่อเหตุการณ์ Pressed ในบรรทัด 1315 ซึ่งจะเพิ่มความเร็วในการเดินของตัวละครเป็นสองเท่าเมื่อมีการกดการผูกขาดการวิ่ง และการเชื่อมต่อเหตุการณ์ Released ที่สอดคล้องกันในบรรทัด 1618 ซึ่งจะรีเซ็ตความเร็วในการเดินเป็นค่าเริ่มต้นเมื่อมีการปล่อยการผูกขาดการวิ่ง

    OnActivate (Client Script)
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local character = player.Character
    if not character or character.Parent == nil then
    character = player.CharacterAdded:Wait()
    end
    local humanoid = character:WaitForChild("Humanoid")
    local defaultWalkSpeed = humanoid.WalkSpeed
    local inputAction = script.Parent
    inputAction.Pressed:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed * 2
    end)
    inputAction.Released:Connect(function()
    humanoid.WalkSpeed = defaultWalkSpeed
    end)
©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ