‫สวัสดีและยินดีต้อนรับกลับ
‫ตอนนี้เราพร้อมที่จะเริ่มจัดการข้อมูลของผู้ใช้แล้ว
‫นั่นหมายความว่าเราต้องการกดแป้นคีย์บอร์ดและเลื่อนเมาส์และคลิกเมาส์และเห็นว่ารถถังของเราตอบสนองต่ออินพุตนั้น
‫ในการที่จะทำอย่างนั้นได้ ก่อนอื่นเราต้องรับอินพุตนั้นก่อน และเราจะเริ่มทำนั้นโดยใช้การแมปแกนก่อน
‫เรามาพูดถึงเรื่องนี้กัน
‫ตอนนี้ในโปรเจ็กต์ ไปแก้ไขและตั้งค่าโปรเจ็กต์กัน
‫และถ้าเราเลื่อนลงและเลือกอินพุต จะเห็นการผูกของเราที่นี่
‫และภายใต้การเชื่อมโยงจะมีการแมปการดำเนินการและการแมปแกน
‫อันดับแรก เราจะเข้าสู่การแมปแกน
‫ตอนนี้คุณอาจมีประสบการณ์กับสิ่งเหล่านี้แล้ว แต่เราจะเจาะลึกลงไปอีกเล็กน้อยว่าสิ่งเหล่านี้ทำงานอย่างไรและทำงานอย่างไร
‫ดังนั้นเราจึงมีสามคน
‫และถ้าฉันคลิกที่ลูกศรดรอปดาวน์ ฉันจะเห็นที่นี่ W และ SW และสิ่งเหล่านี้กำลังพูดถึงปุ่ม
‫W และ SW บนแป้นพิมพ์
‫สิ่งเหล่านี้ถูกกำหนดให้กับการแมปแกนเฉพาะนี้ ซึ่งเรียกว่าย้ายไปข้างหน้า
‫เรามาคุยกันว่าการแมปแกนนี้ทำงานอย่างไร
‫ดังนั้นเราจึงเห็นใน Unreal Editor ว่าเรามีการแมปแกนที่เรียกว่า Move Forward และมี
‫W และ SCS ที่กำหนดให้กับการแมปแกนนี้
‫ดังนั้นสิ่งนี้หมายความว่าอย่างไร?
‫ใน Unreal Engine เรามีบางอย่างที่เรียกว่าการแมปแกน
‫และการแมปแกนเป็นสิ่งที่ประมวลผลทุกเฟรมของเกม
‫คุณกำหนดคีย์ให้กับการแมปแกน
‫ในกรณีของเรา เราได้มอบหมายให้ W และ S
‫ตอนนี้ให้ดูถัดจากปุ่ม W ที่นี่
‫ในตัวอย่างภาพหน้าจอเล็ก ๆ ของฉันทางด้านขวา มันบอกว่ามาตราส่วน
‫และถัดจากสเกลมีหมายเลข 1 0.
‫และคุณอาจสังเกตเห็นถัดจาก SQ มาตราส่วนคือ -1 0.
‫ค่าเหล่านี้จึงเป็นค่าที่จะส่งผลต่อข้อมูลที่ป้อนเข้านั้น
‫นี่คือวิธีการทำงานของการแมปแกน
‫การทำแผนที่แกนของเราไปข้างหน้ามีความสามารถในการเชื่อมโยงกับฟังก์ชันใน C ++
‫เมื่อพูดถึงการแมป Axis หากเราเชื่อมโยงฟังก์ชันกับการแมป Axis จำเป็นต้องใช้พารามิเตอร์อินพุตของประเภท
‫float เพื่อให้เราสามารถสร้างฟังก์ชันในบ่อของเราที่เรียกว่า MOVE ที่ลอยได้
‫เราจะเรียกค่าพารามิเตอร์อินพุตนี้
‫ตอนนี้มีวิธีใช้ฟังก์ชันนี้และเชื่อมโยงกับการแมปแกนเดินหน้าของเรา
‫มันบอกว่าเราผูกฟังก์ชันการย้ายเข้ากับการแมปแกน
‫ดังนั้นทุกเฟรมของเกม ระบบอินพุตของ Unreal Engine จะตรวจสอบเพื่อดูว่าเรากำลังกดปุ่ม
‫W หรือคีย์
‫และมันจะคำนวณค่าแกนขึ้นอยู่กับว่าเรากำลังกดปุ่มเหล่านั้นและทุกเฟรมเดียวหรือไม่
‫มันจะเรียกฟังก์ชันนี้ว่าเราต้องก้าวไปข้างหน้าและส่งค่าแกนนั้นเข้าไป
‫สิ่งที่เกิดขึ้นภายในฟังก์ชันนั้นขึ้นอยู่กับเราในฐานะนักพัฒนา C++
‫นี่คือวิธีการทำงาน
‫หากเราไม่กดปุ่ม W หรือคีย์ ค่าแกนนี้จะมีค่าเป็นศูนย์
‫ดังนั้นฟังก์ชันการย้ายที่ผูกไว้กับการแมปแกนเลื่อนไปข้างหน้าจึงเรียกว่าทุกเฟรมเดียวและค่าทศนิยมที่ส่งผ่านเป็นศูนย์
‫สมมติว่าเรากำลังกดปุ่ม W
‫ปุ่ม W มีมาตราส่วนตั้งไว้ที่ 1 0.
‫ซึ่งหมายความว่าค่าแกนของเราจะเท่ากับ 1 0 และนั่นคือสิ่งที่ส่งผ่านไปยังฟังก์ชัน MOV
‫ดังนั้นทุกเฟรมเดียว ฟังก์ชันการย้ายจึงถูกเรียกด้วยค่า 1 0 ผ่านไป
‫สมมติว่าเรากำลังกด SRC ซึ่งมีค่ามาตราส่วนเป็น -1 0.
‫ซึ่งหมายความว่าทุกเฟรมเดียวที่ฟังก์ชันการย้ายจะถูกเรียกและ -1 0 จะถูกส่งผ่าน
‫ในกรณีที่เรากดทั้ง W และ S ค่าทั้งสองนี้จะถูกรวมเข้าด้วยกัน
‫ดังนั้นเราจึงได้ 1 0 จากการกดปุ่ม W และเราได้ -1 0 จากการกด SRC
‫ตอนนี้ทั้งสองหักล้างกัน
‫ดังนั้น หากเรากดทั้งสองอย่างพร้อมกัน ฟังก์ชันการย้ายจะถูกเรียกโดยมีค่าศูนย์ส่งผ่านเข้ามา
‫ดังนั้นขึ้นอยู่กับว่าเรากำลังกดแป้นใด ค่าที่ต่างกันจะส่งผ่านไปยังฟังก์ชัน
‫MOVE ของเรา และเราจะทำอะไรก็ได้ที่เราชอบด้วยค่านั้น เช่น ใช้เพื่อย้ายสัญลักษณ์แทนตัว
‫เราจะพูดถึงการย้ายโรงรับจำนำในไม่ช้านี้
‫สำหรับตอนนี้ เรามาลองตั้งค่าตัวเองกันก่อน เพื่อที่เราจะสามารถจัดการข้อมูลนี้จากระบบการแมปของแกนได้
‫เอาล่ะ ตอนนี้เรารู้แล้วว่าการแมปแกนทำงานอย่างไร ก็ถึงเวลาสร้างฟังก์ชันเรียกกลับที่เราสามารถผูกกับการแมปแกนเดินหน้า
‫ดังนั้นฉันจะปิดการตั้งค่าโปรเจ็กต์และกลับเข้าสู่โค้ด VS
‫ดังนั้นในโค้ด VS เราต้องการสร้างฟังก์ชันที่เราสามารถผูกกับการแมปแกนเลื่อนไปข้างหน้าได้
‫ดังนั้นในถัง H เราสามารถสร้างฟังก์ชันส่วนตัวได้
‫ตอนนี้ก็จะมี
‫ประเภทกลับเป็นโมฆะและฉันต้องการเรียกการย้ายนี้
‫ตอนนี้จำเป็นต้องมีพารามิเตอร์อินพุตแบบลอยตัว และเราจะเรียกค่านี้
‫ลองใช้ฟังก์ชันการย้ายของเราและกำหนดไว้ที่นี่ใน Tank
‫CP ฉันจะติดมันไว้ใต้คอนสตรัคเตอร์และเราจำเป็นต้องมีรถถังที่มีตัวดำเนินการความละเอียดขอบเขตก่อนชื่อฟังก์ชัน
‫ดังนั้นเราจึงมีฟังก์ชันการย้ายและเราพร้อมที่จะผูกมันกับการทำแผนที่แกนเคลื่อนที่ไปข้างหน้า
‫และนั่นจะทำภายในฟังก์ชันที่เรียกว่า setup player input component
‫นั่นน่าจะฟังดูคุ้นเคย
‫ที่จริงแล้ว หากเราเปิด explorer ของเราและกลับไปที่ Base Pont H เราสามารถเลื่อนลงและดูในส่วนสาธารณะของการตั้งค่าฟังก์ชั่นองค์ประกอบอินพุตของผู้เล่น
‫เราจะเห็นว่านี่เป็นการแทนที่ของฟังก์ชันเสมือนที่สืบทอดมา
‫ตอนนี้คลาส spawn พื้นฐานไม่จำเป็นต้องตั้งค่าอินพุตใด ๆ และนั่นคือสิ่งที่ฟังก์ชันนี้ใช้สำหรับจัดการอินพุตจากผู้เล่น
‫ตอนนี้คลาสพันธะฐานของเราไม่จำเป็นต้องจัดการกับอินพุต แต่คลาสรถถังของเรารองรับ
‫สิ่งที่เราทำได้คือนำฟังก์ชันนี้ออกจากบ่อฐาน h แต่ผมจะคัดลอกมันเพราะเราต้องการมันในถัง
‫ในการคัดลอกฟังก์ชันนี้ ฉันจะไปที่ Tank H และในส่วนสาธารณะ ฉันจะวางฟังก์ชันนี้
‫และเนื่องจากเราไม่ต้องการมันในบ่อฐาน ผมจะลบมันออกจากคลาสบ่อฐาน
‫และอันที่จริงฉันกำลังจะไปที่บ่อฐาน CP และลบมันออกจากที่นี่ด้วย
‫ดังนั้น ไปต่อและลบการติดตั้งส่วนประกอบอินพุตของผู้เล่นจาก Base Pond
‫CP และตอนนี้มันไม่ได้อยู่ในคลาสบ่อฐานอีกต่อไป
‫ดังนั้น ไปต่อและบันทึกการเปลี่ยนแปลงของเราและปิดฐาน Pond H และ CP
‫และตอนนี้เรามีการตั้งค่าส่วนประกอบอินพุตของผู้เล่นที่ประกาศใน Tank H แต่เราต้องการกำหนดและรถถังด้วย
‫CP ดังนั้นที่นี่ในถัง
‫CP ฉันจะเพิ่มคำจำกัดความเหนือฟังก์ชันการย้าย
‫ดังนั้นนี่คือโมฆะและเป็นส่วนประกอบในการป้อนข้อมูลของผู้เล่นที่ติดตั้งถัง
‫ตอนนี้กลับไปที่ Tank H และดูว่าพารามิเตอร์อินพุตเป็นอย่างไร
‫คุณจะเห็นว่ามีการประกาศไปข้างหน้าในวงเล็บ
‫นี่คือสิ่งที่คุณสามารถทำได้หากต้องการส่งต่อ ประกาศประเภทคลาสในไฟล์ส่วนหัว
‫ดังนั้นมันจึงมีการประกาศล่วงหน้าที่นี่ และเราต้องการให้คุณป้อนประเภทตัวชี้องค์ประกอบและพารามิเตอร์เรียกว่าส่วนประกอบอินพุตของผู้เล่น
‫ดังนั้นเราจึงต้องการพารามิเตอร์อินพุตนี้ในถัง
‫CP ดังนั้นในวงเล็บสำหรับการตั้งค่าส่วนประกอบอินพุตของผู้เล่น เราจะมีส่วนประกอบอินพุต
‫U ที่เป็นพอยน์เตอร์ และเรียกว่าส่วนประกอบอินพุตของผู้เล่น
‫ดังนั้นตอนนี้ฟังก์ชันลายเซ็นตรงกับการประกาศฟังก์ชัน
‫กลับไปที่ไฟล์ CP ให้ฟังก์ชันนี้เป็นเนื้อหาฟังก์ชัน และเรากำลังเขียนทับฟังก์ชันนี้ และเป็นความคิดที่ดีที่จะเรียก
‫super set up ส่วนประกอบอินพุตของผู้เล่น
‫ตอนนี้ เนื่องจากเรากำลังเรียกใช้ส่วนประกอบอินพุตของเครื่องเล่นเซ็ตอัพเวอร์ชันหลัก เราจึงต้องส่งอินพุตของคอมโพเนนต์อินพุตประเภทที่คุณป้อนเข้าไป
‫เราจะส่งต่อพารามิเตอร์อินพุตไปยังฟังก์ชันนี้ที่นี่
‫ดังนั้นวิธีนี้คลาสพาเรนต์จะเรียกเวอร์ชันของมัน
‫ตอนนี้ถังบ่อฐานไม่ได้ใช้งานฟังก์ชันนี้
‫เราเพิ่งถอดออก
‫แต่คลาสพาเรนต์ถึงเบส -- จะเรียกเวอร์ชันของมัน
‫และเมื่อใดก็ตามที่คุณลบล้างฟังก์ชันเสมือนเช่นนี้ การเรียกใช้เวอร์ชัน super ก็เป็นความคิดที่ดี
‫ดังนั้นเราจึงไม่พลาดทุกฟังก์ชันการใช้งานในเวอร์ชันหลัก
‫ดังนั้นเราจะทำเช่นนี้ทำไม?
‫องค์ประกอบอินพุตของผู้เล่นการตั้งค่าดีสำหรับอะไร?
‫สิ่งหนึ่งที่ดีสำหรับคือการผูกฟังก์ชันเพื่อเข้าถึงการแมป
‫เราต้องการผูกฟังก์ชันการย้ายของเรากับการทำแผนที่แกนเลื่อนไปข้างหน้า
‫และเราทำที่นี่
‫เราทำเช่นนั้นโดยใช้องค์ประกอบอินพุตของผู้เล่นพารามิเตอร์อินพุตนี้
‫นั่นคือสิ่งที่วัตถุนี้ถูกออกแบบมาสำหรับ
‫เราใช้องค์ประกอบอินพุตของผู้เล่น และบนตัวชี้นี้ เราใช้ตัวดำเนินการลูกศรเพื่อเข้าถึงฟังก์ชันที่เรียกว่าแกนผูก
‫ตอนนี้ Bind Axis รับพารามิเตอร์อินพุตสองสามตัว
‫อย่างแรกคือตัวอักษรสตริง ซึ่งหมายความว่าเราจะใช้มาโครข้อความ
‫ตอนนี้เราใส่อะไรในเครื่องหมายคำพูด?
‫เราใส่ชื่อการแมปแกน
‫เราเห็นในตัวแก้ไขว่าการแมปแกนนี้เรียกว่าก้าวไปข้างหน้า
‫ดังนั้นเราจึงเลือกการแมปแกนนั้นเพื่อผูกกับพารามิเตอร์อินพุตที่สอง
‫นี่จะเป็นตัวชี้ไปยังวัตถุที่ผูกฟังก์ชันสำหรับสิ่งนี้ เป็นตัวชี้ไปยังอินสแตนซ์ของคลาสเฉพาะที่
‫n และเนื่องจากเราอยู่ในคลาสรถถัง สิ่งนี้จะชี้ไปที่ตัวอย่างของการจำนำรถถังใน
‫เกม.
‫ตอนนี้พารามิเตอร์ที่สามคือที่อยู่ของฟังก์ชันที่เราผูกไว้
‫ดังนั้นเราจึงมีการย้ายรถถัง
‫สำคัญมากที่เราต้องเต็มที่
‫รับรองชื่อฟังก์ชันด้วยชื่อของคลาส
‫และตรงนี้ข้างหน้าชื่อฟังก์ชัน เราต้องการที่อยู่ของโอเปอเรเตอร์
‫ถ้าคุณไม่คุ้นเคยกับการทำสิ่งนี้ นี่เป็นเพียงการระบุที่อยู่ของฟังก์ชัน
‫ฟังก์ชั่นสามารถมีที่อยู่ได้เช่นเดียวกับตัวแปร
‫ดังนั้นการใช้ที่อยู่ของโอเปอเรเตอร์จึงเป็นวิธีการส่งฟังก์ชันไปยังฟังก์ชันอื่นๆ
‫นั่นเป็นเหตุผลที่เราต้องการที่อยู่ของโอเปอเรเตอร์นั้น
‫ดังนั้นเราจึงมีการเรียกใช้ฟังก์ชันเพื่อผูกการเข้าถึง
‫ตอนนี้คุณอาจสังเกตเห็นว่าตัวชี้ข้อผิดพลาด IntelliSense เป็นประเภทคลาสที่ไม่สมบูรณ์ที่คุณป้อนส่วนประกอบไม่ได้รับอนุญาต
‫ตอนนี้เรารู้แล้วว่าอะไรทำให้เกิดสิ่งนี้
‫ประการหนึ่ง อาจหมายความว่าเราต้องรวมไฟล์ส่วนหัว
‫ความเป็นไปได้อีกอย่างหนึ่งคือมันเป็นข้อผิดพลาดที่ผิดพลาด
‫คุณสามารถหาข้อมูลได้ง่ายโดยการคอมไพล์ ดังนั้นเรามาลองคอมไพล์กัน
‫เราจะเห็นว่าเราคอมไพล์สำเร็จแล้ว
‫เราจึงรู้ว่านี่เป็นข้อผิดพลาดที่ผิดพลาด
‫แต่หากต้องการ คุณสามารถเพิ่มการรวมเพื่อลบออกได้
‫จึงไม่รบกวนคุณ
‫ตอนนี้เรารู้แล้วว่าประเภทคลาสที่มันบ่นคือองค์ประกอบอินพุตของคุณ
‫นี่คือส่วนประกอบที่คุณป้อนในเอกสารประกอบ และนี่คือส่วนรวม
‫และถ้าเรารวมสิ่งนี้ไว้ที่ด้านบนสุดของไฟล์ CP ของรถถัง เราจะกำจัดข้อผิดพลาดที่น่ารำคาญนั้นออกไป
‫และอีกครั้ง เนื่องจากสิ่งเหล่านี้มี Pragya ต้องการรวมถึงยาม เรารู้ว่าส่วนประกอบอินพุตจะไม่ถูกรวมมากกว่าหนึ่งครั้งและจะมี
‫squiggles ที่พวกมันหายไป
‫ตอนนี้เรารู้แล้วว่าฟังก์ชันการย้ายนี้จะถูกเรียกทุกเฟรมและค่าจะมีค่าโฟลตเฉพาะขึ้นอยู่กับว่าเรากำลังกด
‫W หรือถาม
‫ตอนนี้ แค่รู้ว่าฟังก์ชั่นการย้ายถูกผูกไว้เพื่อก้าวไปข้างหน้าไม่เพียงพอ
‫ในฐานะนักพัฒนา เป็นการดีที่จะมีการยืนยันว่าสิ่งต่างๆ กำลังทำงานอยู่
‫ดังนั้นสิ่งที่ฉันอยากให้คุณทำตามความท้าทายของคุณคือการใช้บันทึก YUI ในฟังก์ชัน MOV เพื่อพิมพ์ค่าที่ส่งผ่านไปยังการเคลื่อนไหวที่เรียกว่าค่าลอย
‫ดังนั้นใช้เปอร์เซ็นต์ f ในบันทึก uiy เพื่อบันทึกค่าของค่า float ลงในบันทึกผลลัพธ์ จากนั้นเล่นเกมทดสอบและกดปุ่มเหล่านั้นและดูว่าคุณได้รับการพิมพ์อะไรลงในบันทึก
‫หยุดวิดีโอชั่วคราวและเพิ่มลงในฟังก์ชันการย้ายทันที
‫ตกลง.
‫ในฟังก์ชัน mov ฉันจะเพิ่มบันทึก uii
‫และนี่อาจเป็นคำเตือนบันทึกอุณหภูมิ
‫และสำหรับข้อความมาโคร
‫ผมจะใส่ค่า เปอร์เซ็นต์ F และค่า
‫ตอนนี้ไม่เป็นไร
‫หากคุณใช้คำฟุ่มเฟือยหรือคำเตือนประเภทอื่น หากคุณรู้วิธีทำสิ่งเหล่านั้น
‫ไม่เป็นไร
‫ฉันแค่จะใช้คำเตือนที่นี่ และฉันรู้ว่าคุณใช้สิ่งต่างๆ เช่น เปอร์เซ็นต์ se และจัดรูปแบบบันทึกของคุณด้วยค่าสตริง
‫เปอร์เซ็นต์ F หากคุณไม่ทราบคือวิธีที่คุณสามารถจัดรูปแบบบันทึก UI ของคุณด้วยค่าทศนิยม
‫มารวบรวมสิ่งนี้และกลับมาในเครื่องมือแก้ไข ฉันจะเปิดบันทึกผลลัพธ์และกดเล่นและตรวจสอบว่าที่ใดส่งสแปมบันทึกผลลัพธ์ที่มีข้อความนับไม่ถ้วน
‫ตอนนี้ฉันจะคลิกในวิวพอร์ตแล้วกดปุ่ม W
‫มีค่าของฉันหนึ่งฉันจะปล่อย
‫มันกลับเป็นศูนย์
‫ฉันจะกดแป้นและมันเป็นลบหนึ่ง
‫และถ้าเรากดทั้งสองอย่างพร้อมกัน เราจะได้ศูนย์
‫และมันก็เป็นไปตามที่เราคาดไว้
‫สมบูรณ์แบบ.
‫ไม่เป็นไร.
‫ในวิดีโอนี้ เราได้ตั้งค่าบ่อเพื่อจัดการกับข้อมูลบางอย่างของผู้ใช้
‫เราได้พูดคุยเกี่ยวกับการแมปการเข้าถึงและเราผูกฟังก์ชันการย้ายของเราเข้ากับการทำแผนที่การเข้าถึงแบบเลื่อนไปข้างหน้า
‫จากนั้นเราพิมพ์ค่าการเข้าถึงนั้นโดยใช้บันทึก YUI ในฟังก์ชัน MOVE ของเรา แต่จริงๆ แล้วเราต้องการย้ายรถถังของเราแทนที่จะพิมพ์ค่าบางอย่างไปยังบันทึกผลลัพธ์
‫ในการบรรยายที่จะมาถึง เราจะตั้งค่าเพื่อให้เราสามารถเริ่มเคลื่อนย้ายรถถังของเราได้
‫เจอกันเร็วๆนี้ครับ