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

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

ใน Input Action Manager ให้ชี้ไปที่ส่วนหัวคอลัมน์ Context และคลิกปุ่ม + ป้อนชื่อที่เหมาะสมสำหรับบริบทใหม่ เช่น 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)

