การเชื่อมต่อการป้อนข้อมูลของผู้ใช้เข้าสู่การกระทําจะให้ควบคุมที่ดีขึ้นและเป็นธรรมชาติมากขึ้นสําหรับคุณสมบัติของคุณ ในการฝึกซ้อมนี้คุณจะผูกการเรียกใช้การรีโหลดไปยังกุญแจที่เฉพาะเจาะจง
เริ่มต้นใช้งาน
ในวิดีโอนี้ คุณสามารถดูวิธีการใช้ Blaster เครื่องมือที่สร้างขึ้นใน สร้างเครื่องมือผู้เล่น คุณสามารถปฏิบัติตามคำแนะนำเหล่านี้เพื่อสร้างเครื่องมือหรือคุณ
สามารถเพิ่มโมเดลลงในสินค้าคงคลังของคุณเพื่อใช้ระหว่างประสบการณ์ใด ๆ เพื่อเพิ่มโมเดลให้กับประสบการณ์ของคุณ:
- ในเบราว์เซอร์, เปิดหน้า โมเดล, คลิกปุ่ม รับ น. คลังไอเท็ม
- ใน Studio, ไปที่แท็บ ดู และคลิกที่ กล่องเครื่องมือ
- ในหน้าต่างกล่องเครื่องมือ, คลิกปุ่ม ในช่องเก็บของ แล้วตรวจสอบว่าปุ่มลูกลงมาอยู่ใน รุ่นของฉัน หรือไม่.
- เลือกโมเดล Blaster เพื่อเพิ่มมันในประสบการณ์
การสร้าง Action Handler
ตัวแรกคุณจะต้องมีฟังก์ชันเพื่อจัดการกับตอนที่ผู้ใช้ป้อนข้อมูล
เปิด ToolController ภายใน Blaster
แอ็คชัน
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function toolEquipped()tool.Handle.Equip:Play()endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)สร้างคุณสมบัติที่มีชื่อว่า onAction ที่ได้รับสามตัวอักษร: actionName , inputState และ inputObject นี่จะเป็นคุณสมบัติที่วิ่งเมื่อตรวจพบการป้อนของผู้ใช้
local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)endlocal function toolEquipped()tool.Handle.Equip:Play()endในตัวฟังก์ชันตรวจสอบว่า actionName ตรงกับชื่อการโหลดใหม่และให้แน่ใจว่า inputState เป็น UserInputState.Begin (สถานะเริ่มต้น) เนื่องจากฟัง
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thenendendเพื่อให้เป็นเรื่องชัดเจนเมื่อผู้ใช้รีโหลด, เปลี่ยน TextureId ของเครื่องมือเป็น "rbxassetid://6593020923" สักครู่แล้วเปลี่ยนกลั
local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endend
ผูกการกระทํา
ContextActionService สามารถใช้เพื่อผูกฟังก์ชันไปยังการป้อนข้อมูลเฉพาะโดยใช้ฟังก์ชัน Class.ContextActionService:BindAction()|BindAction ซึ่งรองรับตัวอาร์กุนต์หลายตัว:
- แอ็คชัน
- หน้าโค้ดที่จะดำเนินการตามที่กล่าวถึงข้างต้น (เรียกว่า "คันธนู")
- ว่าจะแสดงปุ่มบนหน้าจอสัมผัสหรือไม่
- จํานวนเงินใด ๆ ของ Enum.KeyCodes เพื่อตรวจจับและเชื่อมโยงกับการกระทํา
รหัสคีย์เป็นค่าที่แทนที่ปุ่มการป้อนข้อมูลต่างๆ เช่นปุ่มเล่นเกมหรือปุ่มควบคุม รายการรหัสเต็มรูปแบบสามารถพบได้ที่ here .
รับ ContextActionService ที่ด้านบนของสคริปต์
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"ภายในคุณสมบัติ 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 thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endทดสอบเล่นโดยการใช้เครื่องมือและกดปุ่ม R บนคีย์บอร์ดของคุณ ไอคอนกระเป๋าจะเปลี่ยนเป็นสัญลักษณ์รอก่อนเพื่อสัญลักษณ์ว่าอาวุธกำลังรีโหลด:
การเปลี่ยนการผูกของการกระทํา
เมื่อผู้ใช้ถอดเครื่องมือออก การกระทําจะต้องเป็น ไม่ผูก เพื่อให้พวกเขาไม่สามารถรีโหลดได้โดยไม่มีเครื่องมือ
สร้างคุณสมบัติใหม่ที่มีชื่อว่า toolUnequipped และโทร UnbindAction ผ่านชื่อการกระทำ
local function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Activated:Connect(toolActivated)เชื่อมต่อฟังก์ชัน toolUnequipped ไปยังเหตุการณ์ Unequipped เพื่อให้ฟังก์ชันนี้จะทำงานเมื่อเหตุการณ์เกิดขึ้น
local ContextActionService = game:GetService("ContextActionService")local tool = script.Parentlocal RELOAD_ACTION = "reloadWeapon"local function onAction(actionName, inputState, inputObject)if actionName == RELOAD_ACTION and inputState == Enum.UserInputState.Begin thentool.TextureId = "rbxassetid://6593020923"task.wait(2)tool.TextureId = "rbxassetid://92628145"endendlocal function toolEquipped()ContextActionService:BindAction(RELOAD_ACTION, onAction, true, Enum.KeyCode.R)tool.Handle.Equip:Play()endlocal function toolUnequipped()ContextActionService:UnbindAction(RELOAD_ACTION)endlocal function toolActivated()tool.Handle.Activate:Play()endtool.Equipped:Connect(toolEquipped)tool.Unequipped:Connect(toolUnequipped)tool.Activated:Connect(toolActivated)ทดสอบเพื่อยืนยันว่าทุกอย่างทำงานได้อย่างถูกต้อง คุณควรสามารถรีโหลดเมื่อเครื่องมือถูกติดตั้ง แต่ไม่ใช่เมื่อถูกถอดออก
การโหลดเสร็จสิ้นของคุณแล้ว - สำหรับความท้าทายพิเศษให้ลองนับจำนวนเครื่องปืนที่ยิงออกแต่ละครั้ง คุณสามารถเปิดใช้งานได้อีกครั้งเมื่อการโหลดเสร็จสิ้นแล้วเมื่อคุณไม่มีเค