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

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

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

เริ่มต้นใช้งาน

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

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

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

การสร้าง Action Handler

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

  1. เปิด 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 (สถานะเริ่มต้น) เนื่องจากฟัง


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


    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 สามารถใช้เพื่อผูกฟังก์ชันไปยังการป้อนข้อมูลเฉพาะโดยใช้ฟังก์ชัน Class.ContextActionService:BindAction()|BindAction ซึ่งรองรับตัวอาร์กุนต์หลายตัว:

  • แอ็คชัน
  • หน้าโค้ดที่จะดำเนินการตามที่กล่าวถึงข้างต้น (เรียกว่า "คันธนู")
  • ว่าจะแสดงปุ่มบนหน้าจอสัมผัสหรือไม่
  • จํานวนเงินใด ๆ ของ 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. ทดสอบเพื่อยืนยันว่าทุกอย่างทำงานได้อย่างถูกต้อง คุณควรสามารถรีโหลดเมื่อเครื่องมือถูกติดตั้ง แต่ไม่ใช่เมื่อถูกถอดออก

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