‫ยินดีต้อนรับกลับ.
‫ตอนนี้เรามีโหมดเกมแล้ว และเราต้องการใช้โหมดเกมเพื่อกำหนดว่าจะเริ่มเกมได้เมื่อใด
‫ตอนนี้บางเกมมีดีเลย์หรือตัวจับเวลานับถอยหลังที่เริ่มเมื่อเกมเริ่ม
‫และหลังจากเวลาที่กำหนด ผู้เล่นจะได้รับอนุญาตให้ย้ายตัวละครหรือในกรณีของเรา
‫รถถังรอบโลก
‫เราจะนำสิ่งนั้นไปใช้ในวิดีโอนี้
‫สิ่งนี้จะเกี่ยวข้องกับการปิดอินพุตก่อน ดังนั้นเราไม่สามารถเคลื่อนที่ไปมาได้เมื่อเกมเริ่มต้นขึ้น
‫จากนั้นเราจะตั้งเวลาและหลังจากเวลาที่กำหนด จากนั้นเราสามารถเปิดใช้งานอินพุตได้
‫กลับไปที่การปรับโหมดเกมรถถังและเพิ่มสองสามอย่างที่นี่
‫อันดับแรก ฉันต้องการเพิ่มจำนวนลอยสำหรับระยะเวลาที่ควรผ่านไปเมื่อเกมเริ่มต้นก่อนที่เราจะสามารถเริ่มเคลื่อนไหวได้
‫โฟลตนี้จะถูกเรียกว่าการหน่วงเวลาเริ่มต้น และฉันจะเริ่มต้นสิ่งนี้เป็นสามจุด F เพื่อให้เราต้องรอ
‫3 วินาทีก่อนที่เราจะสามารถเริ่มเกมได้
‫ตอนนี้ ทันทีที่เกมเริ่ม ฉันต้องการเริ่มตัวจับเวลานี้ ซึ่งหมายความว่าฉันต้องการฟังก์ชันที่จะเริ่มตัวจับเวลานี้
‫และฉันจะทำให้ฟังก์ชันนี้เป็นฟังก์ชันส่วนตัวด้วย
‫ฉันจะทำให้ฟังก์ชั่นนี้เป็นโมฆะที่เรียกว่า handle game start
‫ตอนนี้ฉันสามารถใช้ handle game start ในโหมดปรับแต่งรถถังได้
‫ลงที่นี่ภายใต้เริ่มเล่น
‫ตอนนี้ฉันจะไม่ลืมที่จะเพิ่มชื่อคลาสโหมดเกมปรับแต่งรถถังที่นี่ และตอนนี้ฉันมีฟังก์ชั่นเริ่มเกมที่จับ
‫ตอนนี้สถานที่ที่จะเรียกสิ่งนี้คือ Begin Play
‫เนื่องจาก Begin Play ถูกเรียกเมื่อเริ่มเกม
‫ผมจะเรียกเกมจับ เริ่มที่นี่ และเริ่มเล่น
‫และเนื่องจากเราทำสองสิ่งที่นี่ในช่วงเริ่มต้นของเกม โดยที่การตั้งค่ารถถังและการปรับแต่งรถถัง
‫ผู้เล่น ตัวแปรคอนโทรลเลอร์ ฉันต้องการย้ายสิ่งเหล่านี้ไปสู่การเริ่มเกมแฮนเดิล
‫ดังนั้นฉันจะย้ายสิ่งเหล่านั้นลงไปที่การเริ่มเกมแฮนเดิล และวิธีนั้นจะตั้งค่าตัวควบคุมผู้เล่นของผู้เล่นแทงค์และแทงค์
‫เนื่องจากเรากำลังเรียกเกมแฮนเดิลเริ่มต้นที่นี่และเริ่มเล่น
‫นี่คือที่ที่ฉันต้องการเริ่มจับเวลาหลังจากนั้นเราสามารถเปิดใช้งานการป้อนข้อมูลของผู้ใช้
‫ก่อนที่เราจะเริ่มจับเวลา ฉันจะปิดอินพุตเพื่อให้เราไม่สามารถย้ายถังได้
‫และนั่นจะต้องใช้ฟังก์ชันของเรา
‫เราวางไว้ที่นี่ในการปรับแต่งรถถัง ตัวควบคุมผู้เล่นที่เรียกว่าตั้งค่าสถานะเปิดใช้งานผู้เล่น
‫และนั่นหมายความว่าฉันจะใช้ Tuning Tank, Player Controller
‫และถ้าฉันจะใช้ตัวควบคุมผู้เล่นของ Tune Tank ก็ควรตรวจสอบให้แน่ใจว่ามันถูกต้อง
‫ดังนั้นฉันจะบอกว่าถ้าปรับแต่งรถถัง ผู้เล่น ผู้ควบคุม และถ้าเราไปถึงด้านในของคำสั่ง
‫if แล้ว ฉันสามารถปรับสถานะรถถัง ผู้เล่นควบคุม และ call set ผู้เล่นเปิดใช้งานสถานะและส่งผ่านเป็นเท็จ
‫และด้วยเหตุนี้รถถังของเราไม่สามารถเคลื่อนที่ได้
‫และฉันเห็นกระรอกสีแดง และนั่นเป็นเพราะฉันบอกว่าแทงค์แทงค์ ผู้ควบคุมผู้เล่นมากกว่าที่จะปรับแต่งแทงค์
‫ดังนั้นการสะกดถูกต้องตอนนี้ฉันจึงไม่มีข้อผิดพลาด
‫ต่อไปเราต้องเริ่มจับเวลา
‫ตอนนี้เรารู้แล้วว่าตัวจับเวลาเกี่ยวข้องกับการใช้ตัวจับเวลา F และเราสามารถสร้างตัวจัดการตัวจับเวลา
‫F ได้จริง ๆ แทนที่จะมีตัวแปรสมาชิกที่เป็นของคลาส
‫ดังนั้นฉันจะดำเนินการต่อและฉันจะเรียกเครื่องเล่นนี้ว่าเปิดใช้งานตัวจับเวลา
‫และต่อไป เราต้องตั้งเวลาสำหรับฟังก์ชันเรียกกลับสำหรับตัวจับเวลาของเรา ฉันต้องการใช้สถานะเปิดใช้งานผู้เล่นที่ตั้งค่าไว้
‫แต่สถานะเปิดใช้งานผู้เล่นตั้งค่าเป็นฟังก์ชันที่ต้องใช้อินพุตประเภทบูลีน
‫ตอนนี้เรายังไม่เห็นวิธีตั้งเวลาโดยใช้การเรียกกลับที่ต้องใช้พารามิเตอร์อินพุต
‫นี้จะเกี่ยวข้องกับแนวคิดใหม่ที่เรียกว่าผู้รับมอบสิทธิ์จับเวลา
‫มาดูระบบจับเวลาของ Unreal Engine กัน
‫อีกครั้ง เรารู้ว่ามีตัวจับเวลาทั่วโลกที่จัดการตัวจับเวลาของเราและมีฟังก์ชันตัวจับเวลาที่ตั้งไว้
‫ขณะนี้มีฟังก์ชั่นตั้งเวลาเกินพิกัดหลายครั้ง
‫เราเคยเห็นหนึ่งในนั้นแล้ว
‫ตอนนี้ฉันจะพูดถึงเวอร์ชันอื่นของฟังก์ชันนี้
‫และรุ่นนี้ต้องมีตัวจับเวลา อัตราตัวจับเวลา หรือเวลาหน่วงในระหว่างที่เราต้องรอก่อนที่จะเรียกฟังก์ชันเรียกกลับของเรา
‫และแทนที่จะใช้ที่อยู่ของฟังก์ชันเรียกกลับโดยตรง อาจใช้สิ่งที่เรียกว่าผู้รับมอบสิทธิ์จับเวลาได้
‫นี่คือโครงสร้างของผู้รับมอบสิทธิ์ตัวจับเวลาประเภท F ซึ่งช่วยให้เราสร้างวัตถุที่สามารถผูกฟังก์ชันกับมันได้โดยตรง
‫และผู้รับมอบสิทธิ์จับเวลาสามารถผูกฟังก์ชันที่ต้องใช้พารามิเตอร์อินพุตได้
‫ตอนนี้เราสามารถสร้างตัวแปรตัวจับเวลาของ EF และเริ่มต้นได้โดยใช้ฟังก์ชัน create you object จากผู้รับมอบสิทธิ์
‫f timer
‫การดำเนินการนี้จะสร้างผู้รับมอบสิทธิ์จับเวลาใหม่และเริ่มต้นตามสิ่งที่เราส่งผ่านในวงเล็บ
‫สิ่งนี้จะนำวัตถุผู้ใช้ที่เป็นของ
‫แน่นอน คลาสที่ฟังก์ชันเรียกกลับของเรามีอยู่
‫และต่อไปจะใช้ที่อยู่ของฟังก์ชันเรียกกลับเอง ตามด้วยค่าอินพุตใดๆ ที่เราต้องการส่งผ่านไปยังการโทรกลับของเราเมื่อมีการเรียก
‫จากที่นั่น เราสามารถเรียกตัวตั้งเวลาจากตัวจัดการตัวจับเวลาโลก และใช้โอเวอร์โหลดที่ต้องใช้ตัวจับเวลา
‫การโอเวอร์โหลดนี้ต้องใช้ตัวจับเวลาเอง ผู้รับมอบสิทธิ์จับเวลา อัตราการเล่นหรือโฟลตที่กำหนดความล่าช้าก่อนที่จะเรียกการโทรกลับของเรา
‫จากนั้นบูลีนเพื่อพิจารณาว่าตัวจับเวลาของเราควรวนซ้ำหรือไม่ ดังนั้นเราจึงรู้วิธีสร้าง
‫ตัวแทนจับเวลา F
‫ดังนั้น ฉันอยากให้คุณสร้างมันขึ้นมาในฟังก์ชัน handle game start ภายในคำสั่ง if ใหม่ของเรา
‫ดังนั้นให้สร้างผู้รับมอบสิทธิ์ f timer ในพื้นที่และใช้ผู้รับมอบสิทธิ์ f timer
‫สร้างคุณวัตถุ
‫ตอนนี้เราจะต้องส่งผ่านวัตถุผู้ใช้และโดยปกติเราใช้สิ่งนี้เป็นวัตถุผู้ใช้ แต่ฟังก์ชั่นที่เราต้องการเรียกนั้นมีอยู่ในตัวควบคุมเครื่องเล่น
‫ดังนั้นการส่งผ่านคือตัวควบคุมผู้เล่นรถถังที่ปรับแต่งได้เป็นอินพุตแรกที่จะเป็นวัตถุของผู้ใช้และฟังก์ชั่นการโทรกลับจะถูกตั้งค่าสถานะที่เปิดใช้งานของผู้เล่นซึ่งฟังก์ชั่นที่เราเพิ่มลงในตัวควบคุมผู้เล่นที่กำหนดเองของเรา
‫อย่าลืมที่อยู่ของโอเปอเรเตอร์และในฐานะอินพุตที่สามเราจะส่งต่อค่า
‫จริงอยู่ นี่คือสิ่งที่จะถูกส่งต่อไปยังสถานะเปิดใช้งานผู้เล่นที่ตั้งค่าไว้ เมื่อการโทรกลับของเราถูกเรียกเมื่อสิ้นสุดการจับเวลา
‫หยุดวิดีโอชั่วคราวแล้วลองทำดู
‫ภายใต้ตัวจับเวลาของเรา ฉันจะสร้างผู้รับมอบสิทธิ์ตัวจับเวลา F ในพื้นที่ และฉันจะเรียกเครื่องเล่นนี้ว่าเปิดใช้ผู้รับมอบสิทธิ์ตัวจับเวลา
‫ไม่เป็นไร.
‫ถ้าคุณตั้งชื่อเป็นอย่างอื่น
‫ตอนนี้ฉันจะเริ่มต้นสิ่งนี้โดยใช้ f timer, delegate, create you object
‫และสิ่งนี้จะใช้วัตถุของผู้ใช้ก่อน และนั่นจะเป็นตัวควบคุมผู้เล่นรถถังของเรา
‫ดังนั้นผมจะบอกว่าปรับแต่งตัวควบคุมผู้เล่นรถถังเป็นอินพุตแรก
‫และสำหรับวินาทีที่เราต้องการฟังก์ชันเรียกกลับของเรา และนั่นจะเป็นการปรับแต่งผู้เล่นแทงค์ สถานะเปิดใช้งานผู้เล่นที่ตั้งค่าคอนโทรลเลอร์
‫และฉันไม่สามารถลืมได้ ฉันต้องการที่อยู่ของโอเปอเรเตอร์สำหรับแอดเดรสของฟังก์ชันนี้ และค่าที่ฉันต้องการส่งผ่านไปยังฟังก์ชันเรียกกลับนี้จะเป็นจริงในลักษณะนั้น
‫เมื่อสิ้นสุดการหน่วงเวลา เมื่อการโทรกลับนี้ถูกเรียก true จะเป็นค่าที่ส่งผ่านไปยังฟังก์ชันการโทรกลับ
‫ตอนนี้ฉันพร้อมที่จะโทรตั้งเวลาซึ่งหมายความว่าฉันต้องโทรหาผู้จัดการตัวจับเวลาทั่วโลก
‫จากนั้นฉันสามารถโทรตั้งเวลาได้
‫และฟังก์ชั่นโอเวอร์โหลดที่เราใช้ก่อนนั้นจะใช้ตัวจับเวลาและนั่นจะเป็นตัวจัดการตัวจับเวลาที่เปิดใช้งานเครื่องเล่น
‫ข้อมูลถัดไปที่ฉันจะส่งผ่านคือผู้รับมอบสิทธิ์
‫นั่นจะเป็นการเปิดใช้งานผู้เล่น ผู้รับมอบสิทธิ์จับเวลา
‫ต่อไป.
‫เราต้องการเวลาดีเลย์ของเรา และนั่นจะเป็นการดีเลย์เริ่มต้น ซึ่งเป็นโฟลตที่เราเพิ่งสร้างขึ้น
‫ต่อไปฉันจะผ่านในการเริ่มต้นล่าช้า
‫และสุดท้าย ฉันไม่ต้องการให้ตัวจับเวลานี้วนซ้ำ ดังนั้นฉันจะส่งผ่านเป็นเท็จ เพื่อไม่ให้เกิดพฤติกรรมวนซ้ำ
‫ตอนนี้ฉันจะไปข้างหน้าและเยื้องอินพุตเหล่านี้เพื่อให้ดูสวย
‫และตอนนี้เรากำลังเรียกตัวตั้งเวลาโดยใช้ผู้รับมอบสิทธิ์ตัวจับเวลาใหม่ของเรา
‫และเมื่อสิ้นสุดเวลาหน่วงนี้ เราควรได้รับฟังก์ชันเรียกกลับของเรา ตั้งค่าสถานะเปิดใช้งานผู้เล่นที่เรียกใช้ด้วยค่าที่ส่งผ่านจริงในขณะนี้
‫เนื่องจากความล่าช้าในการเริ่มต้นคือ 3 วินาที และเรากำลังเรียกสถานะเปิดใช้งานผู้เล่นที่ตั้งค่าเป็นเท็จก่อนที่เราจะตั้งเวลา
‫เมื่อเรากดเล่น เราไม่น่าจะเคลื่อนที่ได้จนกว่าการดีเลย์สามวินาทีนี้จะหมดลง
‫ลองรวบรวมสิ่งนี้และดูว่ามันทำงานอย่างไร
‫ดังนั้นฉันจะไปข้างหน้าและตีเล่นและฉันพยายามย้ายไปรอบ ๆ และฉันทำไม่ได้
‫และหลังจากนั้น 3 วินาที ฉันก็ขยับตัวได้
‫และตรวจสอบสิ่งนี้ด้วย
‫สังเกตว่าเคอร์เซอร์ของฉันคือกากบาท
‫อาจมองเห็นได้ยากบนหน้าจอ แต่คุณควรมองเห็นบนหน้าจอได้ตามปกติ
‫และสิ่งนี้ทำให้ฉันเล็งและควบคุมรถถังได้ง่ายขึ้นมาก
‫การหมุนของป้อมปืน
‫สมบูรณ์แบบ.
‫โดยสรุปแล้ว เราได้สร้างฟังก์ชันแฮนเดิลเกมสตาร์ทสำหรับโหมดเกม และเราเรียกสิ่งนี้ว่าและเริ่มเล่น
‫และเรายังตั้งเวลาโดยใช้ผู้รับมอบสิทธิ์จับเวลาซึ่งเราผูกฟังก์ชันสถานะที่เปิดใช้งานผู้เล่นตั้งค่าไว้บนตัวควบคุมเครื่องเล่น
‫สิ่งนี้ทำให้เรามีฟังก์ชั่นเรียกกลับสำหรับตัวจับเวลาของเราที่รับพารามิเตอร์อินพุต และเราใช้สิ่งนี้เพื่อเปิดใช้งานการป้อนข้อมูลของผู้ใช้หลังจากผ่านไปสามวินาทีเมื่อเกมเริ่ม
‫ตอนนี้ มันอาจจะน่าหงุดหงิดสำหรับผู้เล่น ถ้าพวกเขาไม่มีสัญญาณภาพ เป็นการบอกให้พวกเขารู้ว่าอินพุตไม่ได้เปิดใช้งาน
‫บางอย่างเช่นการนับถอยหลังบนหน้าจอ
‫เราจะจัดการเรื่องนี้ในวิดีโอหน้า
‫แต่สำหรับตอนนี้ขอแสดงความยินดี
‫ตอนนี้คุณรู้วิธีผูกฟังก์ชันที่นำพารามิเตอร์อินพุตไปยังผู้รับมอบสิทธิ์จับเวลาแล้ว
‫แล้วพบกันใหม่ในวิดีโอหน้าครับ