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

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

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

เริ่มต้น

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

  1. ในเบราว์เซอร์เปิดหน้ารูปแบบ model คลิกปุ่ม รับ คลังไอเท็ม
  2. ใน Studio ไปที่แท็บ ดู และคลิกที่ กล่องเครื่องมือ 3. ในหน้าต่างกล่องเครื่องมือ คลิกที่ปุ่ม สินค้าคงคลัง จากนั้นตรวจสอบให้แน่ใจว่าการเลื่อนลงอยู่ใน รูปแบบของฉัน 4. เลือกโมเดล Blaster เพื่อเพิ่มลงในประสบการณ์

สร้างตัวจัดการการดำเนินการ

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

  1. เปิด เครื่องควบคุมเครื่องมือ LocalScript

  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 เพื่อตรวจจับและเชื่อมโยงกับการดําเนินการ

รหัสกุญแจเป็นค่าที่แทนที่ปุ่มอินพุตที่แตกต่างกัน เช่น ปุ่มพิมพ์หรือปุ่มควบคุมรายการโค้ดเต็มมีอยู่ here

  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 เมื่อปืนไม่มีกระสุนแล้วเปิดใช้งานใหม่เมื่อการรีโหลดแอนิเมชันเสร็จสิ้น