ตรวจจับการป้อนข้อมูลของผู้ใช้

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

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

เริ่มต้น

บทเรียนนี้ใช้เครื่องมือ Blaster ที่สร้างขึ้นใน สร้างเครื่องมือผู้เล่น คุณสามารถทำตามคำแนะนำเหล่านั้นเพื่อสร้างเครื่องมือ หรือคุณสามารถดาวน์โหลดโมเดล Blaster และแทรกมันลงใน StarterPack

โมเดลสามารถเพิ่มลงในคลังของคุณเพื่อใช้ระหว่างเกมใดก็ได้ เพื่อเพิ่มโมเดลลงในเกมของคุณ:

  1. ในเบราว์เซอร์ เปิดหน้า โมเดล คลิกปุ่ม Get ซึ่งจะเพิ่มโมเดลลงในคลังของคุณ
  2. จากเมนู Window ของ Studio หรือแถบเครื่องมือ Home เปิด Toolbox และเลือกแท็บ Inventory
  3. ตรวจสอบให้แน่ใจว่าดรอปดาวน์อยู่ที่ My Models
  4. เลือกโมเดล Blaster เพื่อเพิ่มมันลงในเกม

สร้างตัวจัดการการกระทำ

ก่อนอื่น คุณจะต้องมีฟังก์ชันเพื่อจัดการเมื่อมีการตรวจจับการป้อนข้อมูลของผู้ใช้

  1. เปิด LocalScript ของ ToolController ภายใน Blaster

    มุมมองของ Explorer ที่สคริปต์ ToolController ภายในเครื่องมือ Blaster ถูกเลือก

  2. สร้างตัวแปรเพื่อเก็บชื่อสำหรับการกระทำ

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  3. สร้างฟังก์ชันชื่อ onAction ที่รับสามอาร์กิวเมนต์: actionName, inputState, และ inputObject นี่จะเป็นฟังก์ชันที่ทำงานเมื่อมีการตรวจจับการป้อนข้อมูลของผู้ใช้

    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    end
    local function toolEquipped()
    tool.Handle.Equip:Play()
    end
  4. ภายในฟังก์ชัน ตรวจสอบว่า actionName ที่กำหนดตรงกับชื่อการกระทำการรีโหลดและตรวจสอบให้แน่ใจว่า inputState เป็น UserInputState.Begin (สถานะเริ่มต้น) สิ่งนี้สำคัญเพราะฟังก์ชันจะทำงานทุกครั้งที่ inputState เปลี่ยน แต่การรีโหลดต้องเกิดขึ้นเพียงครั้งเดียว

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    end
    end
  5. เพื่อให้เห็นได้ชัดเมื่อผู้ใช้รีโหลด เปลี่ยน TextureId ของเครื่องมือเป็น "rbxassetid://6593020923" ชั่วขณะหนึ่ง และจากนั้นเปลี่ยนกลับไปเป็นค่าต้นฉบับของ "rbxassetid://92628145"

    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end

ผูกการกระทำ

ContextActionService สามารถใช้เพื่อ ผูก ฟังก์ชันกับการป้อนข้อมูลเฉพาะโดยใช้ฟังก์ชัน BindAction ซึ่งรับอาร์กิวเมนต์หลายตัว:

  • ชื่อของการกระทำ
  • ฟังก์ชันเพื่อจัดการการกระทำ (เรียกอีกอย่างว่า "callback")
  • ว่าควรแสดงปุ่มหน้าจอสัมผัสหรือไม่
  • จำนวน Enum.KeyCodes ใด ๆ เพื่อตรวจจับและเชื่อมโยงกับการกระทำ

KeyCodes เป็นค่าที่แทนปุ่มการป้อนข้อมูลที่แตกต่างกัน เช่น ปุ่มคีย์บอร์ดหรือปุ่มควบคุม รายการรหัสทั้งหมดมีอยู่ที่ ที่นี่

  1. รับ ContextActionService ที่ด้านบนของสคริปต์

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
  2. ภายในฟังก์ชัน toolEquipped ให้เรียก BindAction และส่งผ่านอาร์กิวเมนต์ต่อไปนี้:

    • ชื่อของการกระทำ (RELOAD_ACTION)
    • ตัวจัดการการกระทำ (onAction)
    • ค่าที่สร้างปุ่มสัมผัส (true)
    • การกดปุ่มเพื่อตรวจจับ (Enum.KeyCode.R)
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
  3. ทดสอบการเล่นโดยการสวมใส่เครื่องมือและกดปุ่ม R บนคีย์บอร์ดของคุณ ไอคอนกระเป๋าเป้ควรเปลี่ยนเป็นสัญลักษณ์รอชั่วขณะเพื่อสัญญาณว่าปืนกำลังรีโหลด:

ยกเลิกการผูกการกระทำ

เมื่อผู้ใช้ถอดเครื่องมือออก การกระทำจะต้อง ยกเลิกการผูก เพื่อที่พวกเขาจะไม่สามารถรีโหลดได้โดยไม่มีเครื่องมือที่สวมใส่

  1. สร้างฟังก์ชันใหม่ชื่อ toolUnequipped และเรียก UnbindAction โดยส่งผ่านชื่อการกระทำ

    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Activated:Connect(toolActivated)
  2. เชื่อมต่อฟังก์ชัน toolUnequipped กับเหตุการณ์ Unequipped เพื่อให้ฟังก์ชันทำงานเมื่อเหตุการณ์เกิดขึ้น

    local ContextActionService = game:GetService("ContextActionService")
    local tool = script.Parent
    local RELOAD_ACTION = "reloadWeapon"
    local function onAction(actionName, inputState, inputObject)
    if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin then
    tool.TextureId = "rbxassetid://6593020923"
    task.wait(2)
    tool.TextureId = "rbxassetid://92628145"
    end
    end
    local function toolEquipped()
    ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)
    tool.Handle.Equip:Play()
    end
    local function toolUnequipped()
    ContextActionService:UnbindAction(RELOAD_ACTION)
    end
    local function toolActivated()
    tool.Handle.Activate:Play()
    end
    tool.Equipped:Connect(toolEquipped)
    tool.Unequipped:Connect(toolUnequipped)
    tool.Activated:Connect(toolActivated)
  3. ทดสอบการเล่นเพื่อยืนยันว่าทุกอย่างทำงานได้อย่างถูกต้อง คุณควรสามารถรีโหลดได้เมื่อเครื่องมือถูกสวมใส่ แต่ไม่สามารถรีโหลดได้เมื่อมันถูกถอดออก

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

©2026 Roblox Corporation. Roblox, โลโก้ Roblox และ Powering Imagination เป็นส่วนหนึ่งของเครื่องหมายการค้าที่จดทะเบียน และไม่ได้จดทะเบียนของเราในสหรัฐฯ และประเทศอื่นๆ