‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะตั้งค่าการเชื่อมโยงระหว่างผู้เสนอญัตติและทริกเกอร์โดยใช้เทคนิคที่เรียกว่าการฉีดยาพึ่งพา
‫ดังนั้นเมื่อจบการบรรยาย ถ้าเราติดการ์กอยล์ ประตูก็จะเลื่อนลงหรืออย่างน้อย บางส่วนไม่
‫มาดูกันว่ามันทำงานอย่างไร
‫และฉันคว้าถ้วย
‫เราได้เห็นแล้วว่ามีการพึ่งพา สิ่งที่เราเรียกว่าการพึ่งพาสำหรับการจัดการทางฟิสิกส์
‫ตัวจับนี้ไม่สามารถทำงานได้จนกว่าคุณจะมีองค์ประกอบที่จับทางฟิสิกส์อยู่ที่ไหนสักแห่งในตอนนี้มันเกิดขึ้นที่องค์ประกอบทริกเกอร์เหมือนกัน
‫คอมโพเนนต์ทริกเกอร์เพื่อให้ทำงานได้อย่างถูกต้อง จำเป็นต้องมีการเข้าถึงคอมโพเนนต์ผู้เสนอญัตติ
‫อย่างไรก็ตาม ในกรณีนี้จะยากขึ้นเล็กน้อย เพราะในกรณีของประตูลับของเรา ไกปืนและวัตถุที่กำลังเคลื่อนที่อยู่ในตัวแสดงคนเดียวกัน
‫คุณจึงสามารถหาวัตถุได้โดยการหาองค์ประกอบของประเภทที่ตัวนักแสดง
‫แต่ถ้าและเราจะมีสถานการณ์นี้ในสคริปต์ของฉันที่ฉันต้องการให้ทริกเกอร์ของฉันอยู่ในส่วนอื่นของห้องจากนักแสดงที่เคลื่อนไหวได้ดีเพื่อให้มีความยืดหยุ่นแบบนั้น
‫เราต้องการให้ทริกเกอร์ไม่ต้องไปหาการพึ่งพาของตัวเอง
‫และจริงๆ แล้วมีชื่อสำหรับแนวคิดของโปรแกรมประเภทนี้
‫เรียกว่าการฉีดพึ่งพา
‫โดยทั่วไปแล้ว ในกรณีที่เรามีบางอย่างที่บอกว่า ฉันต้องการวัตถุอื่น แต่ฉันหามันไม่เจอเอง
‫หรือฉันไม่ต้องการค้นหามันด้วยตัวเอง
‫และมักจะเหมาะสมที่จะไม่ปล่อยให้มันขึ้นอยู่กับวัตถุที่ทำงานของมันเอง ทำให้มีงานอื่นที่พยายามจะจับวัตถุ
‫วิธีที่เราสามารถทำได้คือสร้างกลไกสำหรับพิมพ์เขียวเพื่อบอกองค์ประกอบทริกเกอร์ที่จะหาผู้เสนอญัตติ
‫และวิธีที่เราจะทำคือการสร้างฟังก์ชันที่เรียกใช้พิมพ์เขียวได้บนคอมโพเนนต์ทริกเกอร์ของเรา
‫ดังนั้นมันจะเป็นที่สาธารณะ
‫เราจะใส่มันไว้ในส่วนสาธารณะภายใต้องค์ประกอบติ๊ก และมันจะเป็นฟังก์ชัน
‫U เพื่อให้มันอยู่ในวงเล็บ พิมพ์เขียว callable ได้
‫และไม่จำเป็นต้องมีฟังก์ชันนี้มากนัก
‫มันจะเป็นโมฆะเพราะมันไม่ต้องการมันเพื่อส่งคืนสิ่งของ แต่มันจะถูกตั้งค่าผู้เสนอญัตติดังนั้นมันจะตั้งค่าลิงค์ไปยังผู้เสนอญัตติและเพื่อให้มันตั้งค่าลิงค์ไปยังผู้เสนอญัตติ
‫ใช้ตัวชี้ไปยังองค์ประกอบผู้เสนอญัตติ
‫มันจะเป็นดาวเด่นของคุณ และเราสามารถเรียกสิ่งนี้ว่าผู้เสนอญัตติเช่นนั้น และใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดนั้น
‫และเราต้องเก็บสิ่งนี้ไว้ที่ไหนสักแห่ง
‫เราจะสร้างตัวแปรส่วนตัวใหม่
‫มันจะไม่เป็นคุณสมบัติใหม่และเป็นเพียงตัวชี้การย้าย U ซึ่งเราจะเรียกผู้เสนอญัตติเช่นกัน
‫เช่นนั้นและสิ่งที่เราจะทำคือนำชุดตัวเสนอญัตติไปใช้ใน CPP เพื่อตั้งค่าการย้ายนี้เป็นตัวชี้ ซึ่งโดยค่าเริ่มต้นแล้วจะเป็นโมฆะ
‫และเราต้องทำอีกอย่างหนึ่ง
‫เราต้องรวมไฟล์ส่วนหัวสำหรับผู้เสนอญัตติของเรา
‫ในกรณีนี้ เนื่องจากไฟล์ส่วนหัวอยู่ในโฟลเดอร์เดียวกับองค์ประกอบทริกเกอร์
‫สิ่งที่เราต้องทำคือแฮชรวมถึงผู้เสนอญัตติ H และเพื่อให้แน่ใจว่าองค์ประกอบทริกเกอร์รับรู้ประเภทผู้เสนอญัตติ
‫มาดูองค์ประกอบทริกเกอร์ของเรากัน
‫CP และฉันจะใส่สิ่งนี้ไว้ใต้องค์ประกอบติ๊กที่เรากำลังจะปรับใช้ผู้เสนอญัตติ
‫เราจะใส่คลาสที่คุณทริกเกอร์คอมโพเนนต์ก่อนและเยื้อง
‫ลบอัฒภาคและเพิ่มวงเล็บปีกกา
‫และโดยพื้นฐานแล้ว สิ่งที่เราต้องทำที่นี่ มาเปลี่ยนชื่อในไฟล์ C++ เท่านั้น
‫ไม่สำคัญหรอกว่าชื่อของพารามิเตอร์จะตรงกันระหว่างส่วนหัวและ C++ หรือไม่
‫ดังนั้นเราจึงสามารถเปลี่ยนแปลงได้ที่นี่ และบอกว่าผู้เสนอญัตติใหม่คือสิ่งที่กำลังจะเข้ามาเพื่อกำหนดผู้เสนอญัตติ
‫ดังนั้นเราจึงสามารถตั้งค่าตัวแปรโลคัลของเราได้ คลาสตัวแปรผู้เสนอญัตติของเราเท่ากับผู้เสนอญัตติใหม่เช่น
‫ดังนั้นตอนนี้จึงค่อนข้างสำคัญจริงๆ ที่คุณจะไม่ข้ามขั้นตอนการเปลี่ยนชื่อนี้ เพราะหากพารามิเตอร์อินพุตเป็นชื่อเดียวกับตัวแปรตัวใดตัวหนึ่งในคลาส
‫แล้ว unreal โดยค่าเริ่มต้นจะตั้งค่าให้เป็นข้อผิดพลาด
‫มันเรียกว่าแชโดว์และ Unreal ไม่ต้องการให้คุณทำ ดังนั้นคุณต้องแน่ใจว่าชื่อพารามิเตอร์ของคุณแตกต่างจากตัวแปรในตอนนี้
‫เนื่องจากฟังก์ชันใหม่เหล่านี้ไม่ได้ปรากฏขึ้นพร้อมกับการเปลี่ยนแปลงโค้ดแบบสดเสมอไป
‫ฉันจะปิดตัวแก้ไขคอมไพล์ใหม่จากโค้ด Visual Studio แล้วเปิดใหม่จากโครงการใหม่
‫ตอนนี้ ไปที่ลิ้นชักเนื้อหา เปิดพิมพ์เขียวกำแพงลับของเรา จากนั้นจากโหนด
‫Begin Play ในกราฟเหตุการณ์ ออกจากที่นี่แล้วค้นหาผู้เสนอญัตติชุด
‫ตอนนี้สังเกตว่ามีสองตัวเลือกที่นี่
‫หนึ่ง จะเป็นการตั้งค่าส่วนประกอบที่เรียกว่าผู้เสนอญัตติ และอีกอันคือฟังก์ชันบนส่วนประกอบทริกเกอร์
‫ดังนั้นเราจึงต้องการเลือกฟังก์ชันที่เป็นองค์ประกอบทริกเกอร์
‫แล้วสิ่งที่เราต้องการทำคือลากในองค์ประกอบผู้เสนอญัตติของเราเป็นอาร์กิวเมนต์อื่น ๆ ของฟังก์ชันนี้และนั่นควรทำเคล็ดลับ
‫มันตั้งค่าผู้เสนอญัตติที่เริ่มเล่น
‫ดังนั้นตอนนี้โดยพื้นฐานแล้วสิ่งที่เราต้องการให้เกิดขึ้นคือองค์ประกอบทริกเกอร์ของเราควรตั้งค่าและตั้งค่าควรย้ายบูลีนมาที่นี่
‫นั่นเป็นความท้าทายของฉันสำหรับคุณในการสร้างฟังก์ชั่นสาธารณะในผู้เสนอญัตติและผู้เสนอญัตติ
‫CP ควรตั้งค่าควรย้ายและควรอัปเดตตัวแปรคุณสมบัติของคุณ
‫อันที่จริง คุณสามารถทำให้มันไม่ใช่คุณสมบัติใหม่ได้อีกต่อไปเพราะเราจะตั้งค่าผ่านโค้ดในตอนนี้
‫จากนั้นคุณสามารถใส่ไว้ในส่วนสาธารณะได้
‫จำเป็นต้องเปิดเผยต่อสาธารณะเพราะเราจะพยายามเข้าถึงจากองค์ประกอบทริกเกอร์ของเรา
‫และคุณสามารถเรียกมันว่าตัวชี้ผู้เสนอญัตติที่เรามีในองค์ประกอบทริกเกอร์จากการตั้งค่าองค์ประกอบติ๊ก
‫บูลีนที่เหมาะสม ไม่ว่าเราต้องการให้ปลดล็อกหรือล็อคอีกครั้ง หยุดวิดีโอชั่วคราวแล้วเริ่มเลย
‫โอเค ยินดีต้อนรับกลับ
‫ดังนั้นฉันจะลบคุณสมบัติออกจากควรจะย้าย ฉันจะไปที่ส่วนสาธารณะภายใต้องค์ประกอบ
‫TTIC และฉันจะสร้างชุดโมฆะควรย้ายโดยใช้บูลีนที่เรากำลังจะเรียก เคลื่อนไหวเช่นนั้น
‫จากนั้นเราจะนำสิ่งนี้ไปที่ move CP และใช้มัน แทนที่เครื่องหมายอัฒภาค เพิ่มใน
‫you move ทวิภาค คลาสโคลอน แล้วโดยพื้นฐานอีกครั้ง เราสามารถเรียกสิ่งนี้ว่า new should
‫move และเราสามารถพูดได้ว่า ควรย้ายเท่ากับใหม่ควรย้าย
‫ตอนนี้ คุณอาจสงสัยว่า ทำไมเราไม่สร้างตัวแปรให้เข้าถึงแบบสาธารณะเพื่อที่เราจะตั้งค่าเหล่านั้นได้โดยตรง
‫นั่นไม่ใช่แนวปฏิบัติที่ดีในภาษา C++ เพราะถ้าคุณปล่อยให้ใครคนหนึ่งเปลี่ยนตัวแปรของคุณ คุณจะไม่มีทางรู้ได้เลยว่าจะเกิดอะไรขึ้นกับพวกเขา
‫แม้ว่าคุณจะมีเมธอดที่จะทำแทนคุณ มันจะให้คุณเปลี่ยนวิธีจัดโครงสร้างตัวแปรภายในได้ในภายหลังโดยไม่ต้องเปลี่ยนฟังก์ชันสาธารณะของคุณ
‫ซึ่งหมายความว่ามีการอัปเดตสำหรับคลาสต่างๆ ที่คุณต้องทำน้อยลง
‫โดยทั่วไปแล้ว เราใช้ setters และ getters เสมอ หากเราต้องการเข้าถึงตัวแปรในคลาสอื่น
‫ตอนนี้เราได้สร้างฟังก์ชันใหม่แล้ว ไปที่ CP องค์ประกอบตรีโกณมิติ ซึ่งเราได้รับข้อความบันทึกอยู่ในขณะนี้
‫สิ่งที่เราต้องทำคือเข้าถึงตัวชี้ผู้เสนอญัตติ ดังนั้นเราจะทำชุดลูกศรผู้เสนอญัตติควรย้าย
‫และในกรณีที่เรามีนักแสดงที่ยอมรับได้ นั่นควรเป็นความจริง
‫เราควรย้ายอัฒภาคที่ท้ายบรรทัด
‫และในกรณีอื่น เราก็ไม่ควร
‫ดังนั้นเราจะย้ายชุดลูกศรควรย้ายและในวงเล็บใส่ false ลบ R พิเศษที่ฉันมีที่ส่วนท้ายของเมธอดและลองคอมไพล์ใหม่ในกรณีนี้เพราะฉันได้เพิ่มฟังก์ชันนี้ใน
‫C ++ land และ มันไม่ใช่พิมพ์เขียวที่เรียกได้
‫ฉันไม่คิดว่าฉันต้องรีสตาร์ทตัวแก้ไขเพื่อให้ฟังก์ชันนี้ทำงาน ปิดบันทึกผลลัพธ์
‫ไปที่การ์กอยล์ของเราแล้วเริ่มเล่นและหยิบมันขึ้นมา
‫ออกจากกรงนี้แล้วติดไว้ที่ซุ้มแล้วพวกมันก็ไป มันเลื่อนลงมา แต่จะหยุดทันทีที่กากอยหลุดออกมา
‫ซึ่งไม่เหมาะเพราะกอบลินไม่ได้ยึดอยู่กับที่จริงๆ และผนังไม่ได้
‫ลงเต็มที่
‫และเนื่องจากเป็นการจำลองฟิสิกส์ มันจึงจะโผล่ออกมาจากซุ้มนั้น ใช่ไหม?
‫ดังนั้นสิ่งที่เราต้องทำคือต้องแน่ใจว่าเมื่อเราวางมันลงในพื้นที่ทริกเกอร์ของเราแล้ว มันได้รับการแก้ไขในนั้นและยังคงอยู่
‫มันจะเป็นหัวข้อของการบรรยายต่อไป
‫ฉันจะไปพบคุณที่นั่น.