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

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

การกระทำการป้อนข้อมูล
InputAction กำหนดกลไกการกระทำการเล่นเกมเช่น "กระโดด" "วิ่ง" หรือ "ยิง" การกระทำเหล่านี้จะถูกแมพไปยังการป้อนข้อมูลฮาร์ดแวร์โดยใช้ การผูกขาดการป้อนข้อมูล
InputAction สามารถมีหลายรูปแบบขึ้นอยู่กับคุณสมบัติ Type (Enum.InputActionType) ค่าเริ่มต้นคือ Bool ซึ่งออกแบบมาเพื่อรับค่า true/false จากการกด/ปล่อยของการป้อนข้อมูลเช่น ButtonA, E, หรือ MouseLeftButton
| ประเภทการกระทำการป้อนข้อมูล | ตัวอย่างการใช้งาน |
|---|---|
| Bool | การกระทำที่ถูกกระตุ้นเช่นกระโดด ยิง วิ่ง ฯลฯ โดยสนับสนุนเกณฑ์การกด/ปล่อยบนการป้อนข้อมูลอนาล็อก |
| Direction1D | การกระทำที่มีค่าตั้งแต่ศูนย์ถึงเต็ม เช่น แป้นเหยียบเร่งของรถยนต์หรือระดับการซูมของกล้อง |
| Direction2D | การเคลื่อนไหวในทิศทาง 2D เช่น การหมุนกล้อง หรือการเคลื่อนไหวของตัวละคร Roblox มาตรฐาน |
| Direction3D | การเคลื่อนไหวในทิศทาง 3D เช่น ยานพาหนะที่อยู่ในอากาศซึ่งสามารถลอยขึ้น/ลง เร่ง/ชะลอ และเลี้ยวซ้าย/ขวา |
| ViewportPosition | พิกัด 2D ของ viewport เช่น การป้อนข้อมูลจากเมาส์ เช่น สำหรับเคอร์เซอร์ที่กำหนดเองหรือการเรย์แคสเพื่อเลือกวัตถุในโลก |
เพื่อทดสอบ InputAction สำหรับการวิ่งของตัวละครอย่างง่าย:
- แนะนำเลือกวัตถุ Workspace ระดับสูงสุดใน Explorer และจากนั้นในหน้าต่าง คุณสมบัติ ตั้งค่า PlayerScriptsUseInputActionSystem เป็น Enabled
สร้าง InputAction ใหม่ภายในบริบท PlayContext ภายใน ReplicatedStorage เปลี่ยนชื่อเป็น CharacterSprint เพื่อระบุการกระทำที่เฉพาะเจาะจง

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

Roblox มีการควบคุมการป้อนข้อมูลเริ่มต้นสำหรับการเคลื่อนไหว การควบคุมกล้อง และการโต้ตอบกับสภาพแวดล้อมพื้นฐาน — ผู้เล่น Roblox คุ้นเคยกับการควบคุมเหล่านี้ ดังนั้นคุณควรเปลี่ยนแปลงเฉพาะในกรณีเฉพาะ นอกจากนี้ โปรดทราบว่าการป้อนข้อมูล ที่จองไว้ ไม่สามารถเปลี่ยนแปลงได้และจะทำงานตามวัตถุประสงค์ที่ตั้งใจไว้เสมอ
| การกระทำ | เมาส์/คีย์บอร์ด | เกมแพด | สัมผัส |
|---|---|---|---|
| เปิดเมนู Roblox | Esc | ปุ่มเริ่ม (ButtonStart) | ไม่สามารถใช้ได้ |
| คอนโซลนักพัฒนา | F9 | ไม่สามารถใช้ได้ | ไม่สามารถใช้ได้ |
| โหมดเต็มหน้าจอ (Windows) แสดงเดสก์ท็อป (Mac) | F11 | ไม่สามารถใช้ได้ | ไม่สามารถใช้ได้ |
| บันทึกวิดีโอ (Windows) | F12 | ไม่สามารถใช้ได้ | ไม่สามารถใช้ได้ |
| ถ่ายภาพหน้าจอ | PrintScreen | ไม่สามารถใช้ได้ | ไม่สามารถใช้ได้ |
คุณสมบัติ Type ที่กำหนดให้กับ InputAction หลักจะส่งผลโดยตรงต่อประเภทการป้อนข้อมูลทั่วไป (คีย์/ปุ่ม/แตะ, ทริกเกอร์อนาล็อก, แท่งนิ้ว ฯลฯ) ที่ถูกต้องสำหรับอินสแตนซ์ InputBinding ลูก ในทางกลับกัน ค่าที่ส่งไปยังเหตุการณ์ที่เชื่อมต่อกับการกระทำหลักขึ้นอยู่กับประเภทการป้อนข้อมูลที่เลือก ดู เหตุการณ์การป้อนข้อมูล สำหรับรายละเอียดเกี่ยวกับความสัมพันธ์ระหว่างประเภทการกระทำ การผูกขาด และค่าที่ส่งคืน
เพื่อเชื่อมโยงการผูกขาดสำหรับการวิ่งของตัวละครอย่างง่าย:
แทรก InputBinding ใหม่ลงในการกระทำ CharacterSprint และเปลี่ยนชื่อเป็น KeyboardBinding จากนั้นตั้งค่า KeyCode ของการผูกขาดเป็น LeftShift


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


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


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


เหตุการณ์การป้อนข้อมูล
อินสแตนซ์ InputAction มี เหตุการณ์ ในตัวสามรายการเพื่อจัดการกับการป้อนข้อมูลของผู้เล่นที่มาจาก InputBindings
- StateChanged — เหตุการณ์นี้จะเกิดขึ้นสำหรับประเภทการกระทำการป้อนข้อมูลทั้งหมดเมื่อใดก็ตามที่สถานะเปลี่ยนแปลง ยกเว้นถ้าสถานะพยายามเปลี่ยนไปยังสถานะเดียวกัน
ขึ้นอยู่กับ Type ของการกระทำการป้อนข้อมูล (Bool, Direction1D, Direction2D, Direction3D, หรือ ViewportPosition) และประเภทการป้อนข้อมูลทั่วไปที่มาจาก InputBinding ลูก (คีย์/ปุ่ม/แตะ, ทริกเกอร์อนาล็อก, แท่งนิ้ว ฯลฯ) ค่าที่แตกต่างกันจะถูกส่งคืนไปยังตัวจัดการเหตุการณ์ Pressed, Released, และ StateChanged ตรวจสอบตารางต่อไปนี้เพื่อทำความเข้าใจความสัมพันธ์ให้ดีขึ้น
ประเภท Bool เหมาะที่สุดสำหรับการกระทำที่ถูกกระตุ้นเช่นกระโดด ยิง วิ่ง ฯลฯ โดยสนับสนุนเกณฑ์การกด/ปล่อยบนการป้อนข้อมูลอนาล็อก
| ประเภทการป้อนข้อมูลที่ถูกต้องบน InputBindings | ส่งคืนไปยังเหตุการณ์ InputAction |
|---|---|
| การป้อนข้อมูลแบบ Boolean จากคีย์บอร์ดหรือปุ่มเมาส์/เกมแพดพื้นฐานผ่านคุณสมบัติ KeyCode ของการผูกขาด หรือการกด/ปล่อยของ GuiButton ผ่านคุณสมบัติ UIButton ของการผูกขาด |
|
| จำนวนการป้อนข้อมูลที่แปรผันจากการป้อนข้อมูลอนาล็อกเช่นทริกเกอร์เกมแพด (ButtonL2/ButtonR2) ผ่านคุณสมบัติ KeyCode ของการผูกขาด |
|
เพื่อเชื่อมต่อเหตุการณ์สำหรับการวิ่งของตัวละครอย่างง่าย:
แทรก Script ใหม่ลงในต้นไม้ CharacterSprint ข้างการผูกขาดการป้อนข้อมูลต่างๆ จากนั้นตั้งค่า RunContext เป็น Client และเปลี่ยนชื่อเป็น OnActivate

วางโค้ดต่อไปนี้ลงในสคริปต์ OnActivate โปรดทราบการเชื่อมต่อเหตุการณ์ Pressed ในบรรทัด 13‑15 ซึ่งจะเพิ่มความเร็วในการเดินของตัวละครเป็นสองเท่าเมื่อมีการกดการผูกขาดการวิ่ง และการเชื่อมต่อเหตุการณ์ Released ที่สอดคล้องกันในบรรทัด 16‑18 ซึ่งจะรีเซ็ตความเร็วในการเดินกลับเป็นค่าเริ่มต้นเมื่อมีการปล่อยการผูกขาดการวิ่ง
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)ทดสอบเกมของคุณและทดสอบการกระทำการวิ่งของตัวละครด้วย การผูกขาด ที่คุณเลือกก่อนหน้านี้: LeftShift สำหรับคีย์บอร์ด, ButtonY สำหรับเกมแพด, และปุ่ม SprintButton บนหน้าจอสำหรับอุปกรณ์ที่รองรับการสัมผัส จำไว้ว่าคุณสามารถใช้ Controller Emulator เพื่อลองการป้อนข้อมูลจากเกมแพดโดยตรงใน Roblox Studio
การเปลี่ยนบริบท
เมื่อคุณมี บริบทการป้อนข้อมูล เช่น PlayContext คุณสามารถเปิด/ปิดในระหว่างการเล่นเกมผ่านการเขียนสคริปต์ เปลี่ยน Priority เพื่อกำหนดว่าการกระทำใดมีความสำคัญเหนือกว่า และ Sink การป้อนข้อมูลจากการประมวลผลภายในบริบทที่มีความสำคัญต่ำกว่า
เพื่อให้ง่ายต่อการสลับบริบทจากสคริปต์อื่นๆ ให้แทรก BindableEvent ใหม่ลงในโฟลเดอร์การป้อนข้อมูลของคุณภายใน ReplicatedStorage และเปลี่ยนชื่อเป็น ContextEvent

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

ภายในสคริปต์ 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 thencontext.Enabled = enabledprint(context.Name .. ": " .. tostring(context.Enabled))elsewarn("ไม่พบ InputContext!")endend)ด้วยสคริปต์ UpdateContext อยู่ในที่ตั้ง คุณสามารถอัปเดต InputContext ที่มีชื่อได้โดยการเรียกเหตุการณ์ที่สามารถผูกได้ เช่น จาก LocalScript ที่ขับเคลื่อน GuiButton ภายในคอนเทนเนอร์ ScreenGui
Button Scriptlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local inputsFolder = ReplicatedStorage:WaitForChild("Inputs")local contextEvent = inputsFolder:WaitForChild("ContextEvent")local button = script.Parentbutton.Activated:Connect(function()-- เรียกเหตุการณ์ที่สามารถผูกได้ด้วยบริบทการป้อนข้อมูลเป้าหมายและสถานะที่เปิดใช้งานcontextEvent:Fire("PlayContext", true)end)
การแสดงการผูกขาด
เมื่อคุณตั้งค่า การกระทำ และ การผูกขาด แล้ว คุณมักจะต้องแสดงให้ผู้เล่นเห็นผ่าน คำแนะนำช่วยเหลือบนหน้าจอ ว่าคีย์หรือปุ่มใดกระตุ้นการกระทำแต่ละอย่าง:

ระบบการกระทำการป้อนข้อมูลมีสองวิธี:
- แนะนำInputActionLabel — GuiObject ที่ไม่ต้องเขียนโค้ดและลากและวางซึ่งจะแสดงการป้อนข้อมูลที่ถูกต้องตามแพลตฟอร์มโดยอัตโนมัติ
- ระดับกลางPreferredBinding — คุณสมบัติ InputAction แบบอ่านอย่างเดียวสำหรับผู้สร้างที่ต้องการควบคุมเต็มที่เกี่ยวกับวิธีการแสดงการผูกขาดใน UI ที่กำหนดเอง
InputActionLabel เป็น GuiObject ที่คุณสามารถแทรกลงใน ScreenGui หรือ SurfaceGui ใดๆ เมื่อคุณตั้งค่าคุณสมบัติ InputAction ให้ชี้ไปที่อินสแตนซ์ InputAction ที่มีอยู่ มันจะทำการแก้ไขและแสดงการผูกขาดคีย์ที่ถูกต้องสำหรับอุปกรณ์การป้อนข้อมูลปัจจุบันของผู้เล่นโดยอัตโนมัติ — ไม่ต้องเขียนสคริปต์ เมื่อผู้เล่นสลับอุปกรณ์ (เช่น การหยิบเกมแพดหลังจากใช้คีย์บอร์ด) หรือเปลี่ยนการผูกขาด คำบรรยายจะอัปเดตทันที
ในการเพิ่ม InputActionLabel:
ภายในคอนเทนเนอร์ ScreenGui ภายใน StarterGui ให้แทรก InputActionLabel เช่นเดียวกับ GuiObject อื่นๆ
ในหน้าต่าง คุณสมบัติ ตั้งค่าคุณสมบัติ InputAction เป็นอินสแตนซ์ InputAction ที่คุณต้องการแสดง (เช่น การกระทำ "Sprint" ของคุณภายใต้ ReplicatedStorage) และ จัดตำแหน่ง/ปรับขนาด ตามที่ต้องการ
เมื่อป้ายกำกับแก้ไขสิ่งที่จะแสดง มันจะตรวจสอบสิ่งต่อไปนี้ตามลำดับ:
ภาพที่กำหนดเอง — หากลูก InputBindings มีการตั้งค่าคุณสมบัติ DisplayImage ป้ายกำกับจะเรนเดอร์ภาพเหล่านั้นโดยตรง
ภาพคีย์แพลตฟอร์ม — หากไม่มีภาพที่กำหนดเอง ป้ายกำกับจะเรนเดอร์ภาพที่จัดเตรียมโดยแพลตฟอร์มสำหรับลูก InputBindings ผ่าน UserInputService:GetImageForKeyCode() หากมีภาพดังกล่าว การผูกขาดแบบรวมกับตัวปรับจะมีไอคอนหลายตัวที่แสดงด้วยตัวแบ่ง +
ชื่อที่กำหนดเอง — หากไม่มีภาพที่มีอยู่ หากลูก InputBindings มีการตั้งค่าคุณสมบัติ DisplayName ป้ายกำกับจะเรนเดอร์ข้อความนั้นโดยใช้คุณสมบัติสไตล์ของป้ายกำกับ
สตริงคีย์แพลตฟอร์ม — หากไม่มีสิ่งใดข้างต้น ป้ายกำกับจะเรนเดอร์สตริงที่จัดเตรียมโดยแพลตฟอร์มผ่าน UserInputService:GetStringForKeyCode()
หากไม่มี InputAction ที่กำหนดหรือไม่มีลูก InputBinding ป้ายกำกับจะเรนเดอร์ไอคอนตัวแทน
ผู้จัดการการกระทำการป้อนข้อมูล
เครื่องมือ ผู้จัดการการกระทำการป้อนข้อมูล เป็นอินเทอร์เฟซแบบแมทริกซ์ที่รวมกันเพื่อออกแบบ ตรวจสอบ และขยายสถาปัตยกรรมการป้อนข้อมูลของคุณ
ในการเข้าถึง ให้ไปที่เมนู หน้าต่าง ใน Studio และเลือก การป้อนข้อมูล ⟩ ผู้จัดการการกระทำการป้อนข้อมูล หากเกมของคุณใช้ บริบท การป้อนข้อมูล, การกระทำ หรือ การผูกขาด อยู่แล้ว ผู้จัดการจะสแกน DataModel โดยอัตโนมัติและดึงอินสแตนซ์ที่มีอยู่เหล่านั้นเข้าสู่กริดของตัวแก้ไข อินสแตนซ์ที่เกี่ยวข้องกับการป้อนข้อมูลใหม่จะถูกเพิ่มโดยอัตโนมัติในโฟลเดอร์ Inputs ภายใน ReplicatedStorage

เพื่อกำหนดค่าการตั้งค่าการป้อนข้อมูลสำหรับ การวิ่งของตัวละคร ตามที่อธิบายไว้ในส่วนข้างต้น:
- แนะนำเลือกวัตถุ Workspace ระดับสูงสุดใน Explorer และจากนั้นในหน้าต่าง คุณสมบัติ ตั้งค่า PlayerScriptsUseInputActionSystem เป็น Enabled
ภายในคอนเทนเนอร์ ScreenGui ภายใน StarterGui สร้าง ปุ่มบนหน้าจอ เปลี่ยนชื่อเป็น SprintButton และ จัดตำแหน่ง/ปรับขนาด ตามที่ต้องการ

ใน ผู้จัดการการกระทำการป้อนข้อมูล ให้เลื่อนเมาส์ไปที่ส่วนหัวคอลัมน์ บริบท และคลิกปุ่ม + ป้อนชื่อที่เหมาะสมสำหรับบริบทใหม่ เช่น PlayContext และกด Enter จะมี InputContext ที่มีชื่อที่ตรงกันปรากฏใน ReplicatedStorage


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


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

วางโค้ดต่อไปนี้ลงในสคริปต์ OnActivate สังเกตการเชื่อมต่อเหตุการณ์ Pressed ในบรรทัด 13‑15 ซึ่งจะเพิ่มความเร็วในการเดินของตัวละครเป็นสองเท่าเมื่อมีการกดป้อนข้อมูลสปรินต์ และการเชื่อมต่อเหตุการณ์ Released ในบรรทัด 16‑18 ซึ่งจะรีเซ็ตความเร็วในการเดินกลับเป็นค่าเริ่มต้นเมื่อมีการปล่อยป้อนข้อมูลสปรินต์.
OnActivate (Client Script)local Players = game:GetService("Players")local player = Players.LocalPlayerlocal character = player.Characterif not character or character.Parent == nil thencharacter = player.CharacterAdded:Wait()endlocal humanoid = character:WaitForChild("Humanoid")local defaultWalkSpeed = humanoid.WalkSpeedlocal inputAction = script.ParentinputAction.Pressed:Connect(function()humanoid.WalkSpeed = defaultWalkSpeed * 2end)inputAction.Released:Connect(function()humanoid.WalkSpeed = defaultWalkSpeedend)

