‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะดูว่าเราสามารถตั้งค่าแพลตฟอร์มเคลื่อนที่ของเราโดยใช้ความเร็วเวกเตอร์ในตัวแปรสมาชิกได้อย่างไร
‫และเราจะมาดูกันว่าเราจะทำให้อัตราเฟรมของการเคลื่อนไหวเป็นอิสระได้อย่างไรโดยใช้สิ่งที่เรียกว่าเวลาเดลต้า
‫โอเค ไปดำน้ำกันเถอะ
‫จนถึงตอนนี้ เราเพิ่งอัปเดตองค์ประกอบเดียวของเวกเตอร์ของเราในแต่ละครั้ง
‫แล้วถ้าฉันบอกคุณว่าเราไม่ต้องทำแบบนี้ล่ะ
‫จะเกิดอะไรขึ้นถ้าเราสามารถอัปเดตเวกเตอร์ทั้งหมดได้ในครั้งเดียว
‫เราสามารถบวกเวกเตอร์เข้ากับเวกเตอร์อื่นได้ถ้าเราเคยเห็นในส่วนที่แล้ว
‫สิ่งที่เราทำได้คือไปที่แพลตฟอร์มที่กำลังเคลื่อนที่ H และสร้างสิ่งที่เป็นเวกเตอร์ความเร็วของแท่นเคลื่อนที่ที่บอกทั้งทิศทางและความเร็วที่เราต้องการไป
‫วิธีที่เราทำคือสร้างคุณสมบัติ U ที่ค่อนข้างคุ้นเคย และเราจะแก้ไขได้ทุกที่เพื่อให้มองเห็นได้ในตัวตรวจสอบ
‫แล้วมันจะเป็นเวกเตอร์ประเภท F อย่างที่เราเคยทำมาก่อน และเรา จะเรียกมันว่าความเร็วของแพลตฟอร์ม
‫และตอนนี้เราสามารถให้บางอย่างกับมันได้
‫เราจะทำคอนสตรัคเตอร์เวกเตอร์ F แล้วให้ค่า 100 ในองค์ประกอบ X และศูนย์และศูนย์ในส่วนอื่นๆ
‫แล้วใช้เครื่องหมายอัฒภาคเพื่อปิดท้าย
‫และฉันต้องการแสดงให้คุณเห็นอีกเคล็ดลับหนึ่งที่นี่คือพร้อมกับการแก้ไข ทุกที่ที่เราใส่อาร์กิวเมนต์ที่คั่นด้วยเครื่องหมายจุลภาคให้กับคุณสมบัติ
‫U นี้ ซึ่งดูเหมือนฟังก์ชันนิดหน่อย
‫ที่จริง, คุณสามารถใส่ตัวที่เรียกว่า Category ด้วยตัว C ใหญ่ แล้วคุณใส่เครื่องหมายเท่ากับ
‫และฉันมักจะเว้นช่องว่างระหว่างหมวดหมู่เครื่องหมายเท่ากับเหล่านี้
‫จากนั้นคุณสามารถระบุหมวดหมู่ที่คุณต้องการให้แสดง
‫ด้านล่าง คุณจะเห็นว่ามีหมวดหมู่สำหรับการแปลงการจำลองการเรนเดอร์
‫นี่คือประเภทของหมวดหมู่ที่เราหมายถึง ฉันจะเรียกแพลตฟอร์มเคลื่อนที่ของฉัน เพื่อที่เราจะได้มีหมวดหมู่ของแพลตฟอร์มที่เคลื่อนไหวเพื่อใส่ตัวแปรเหล่านี้
‫และโปรดทราบว่าฉันใช้เครื่องหมายคำพูดคู่รอบหมวดหมู่นั้น
‫นั่นคือไวยากรณ์ที่ถูกต้อง
‫คุณต้องรวมสิ่งเหล่านั้นด้วย
‫แล้วสิ่งที่เราทำได้คือเราสามารถใช้ประโยชน์จากตัวแปรสมาชิกใหม่นี้ใน C++
‫ดังนั้นแทนที่จะตั้งค่าองค์ประกอบ X ของตำแหน่งปัจจุบัน ให้ฉันลบบรรทัดนั้นทั้งหมดแล้วเขียนใหม่เนื่องจากตำแหน่งปัจจุบันเท่ากับตำแหน่งปัจจุบันบวกกับความเร็วของแพลตฟอร์มเช่น
‫ดังนั้นให้ใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดแล้วไปที่ Unreal แล้วกดคอมไพล์แล้วดูว่ามันจะเป็นยังไง
‫จึงเรียบเรียงได้สำเร็จ
‫และคุณจะเห็นได้ว่าตอนนี้ฉันมีส่วนของแพลตฟอร์มเคลื่อนที่นี้บนแพลตฟอร์มที่กำลังเคลื่อนที่ของฉันด้วยความเร็วของแพลตฟอร์มและส่วนประกอบ
‫x ถูกตั้งค่าเป็น 100
‫จะเกิดอะไรขึ้นถ้าฉันไปและกดเล่น?
‫แพลตฟอร์มนั้นเร็วขึ้นอย่างรวดเร็วในระยะไกลเพราะฉันเพิ่ม 100 หน่วยทุกเฟรมเดียว
‫ที่เป็นจำนวนมาก.
‫แต่ฉันต้องการให้มันเคลื่อนที่ด้วยความเร็วประมาณ 100 เซนติเมตรต่อวินาที
‫นั่นคือเพียงหนึ่งเมตรต่อวินาที
‫มันไม่เร็วมาก
‫แล้วทำไมมันเร็วจัง
‫เพราะเฟรมเรตของผม
‫ถ้าฉันอยู่ในระบบที่ช้ากว่า มันจะเคลื่อนที่ช้าลง
‫และถ้าฉันอยู่ในระบบที่เร็วกว่า มันก็จะเคลื่อนที่เร็วขึ้น
‫ดูเหมือนจะไม่สมเหตุสมผล
‫เรามาพูดถึงการใช้เวลาเดลต้ากัน
‫เวลาเดลต้าคืออะไร?
‫การใช้เวลาเดลต้าใน Unreal สามารถบอกเราได้ว่าแต่ละเฟรมใช้เวลานานเท่าใดในการดำเนินการ
‫เวลาเดลต้าอยู่ที่ไหน
‫ถ้าคุณไปที่โค้ด Visual Studio คุณจะเห็นว่าเวลาเดลต้าเป็นตัวแปรที่กล่าวถึงที่ด้านบนสุดของขีด
‫นี่เป็นพารามิเตอร์อินพุตจริงๆ
‫เป็นอินพุตของฟังก์ชันของเรา
‫ดังนั้นเราจึงสามารถใช้มันที่นี่โดยพื้นฐานแล้วเหมือนกับว่าเราใช้ตัวแปรโลคัล เราสามารถใช้มันภายในเนื้อหาของฟังก์ชันเห็บได้
‫ดังนั้นมันจึงบอกเราว่าเฟรมใช้เวลานานเท่าใดในการดำเนินการ
‫แต่ทำไมมันถึงสำคัญ?
‫เพราะเมื่อเราคูณบางสิ่งด้วยเวลาเดลต้า มันจะทำให้อัตราเฟรมเกมของเราเป็นอิสระ ซึ่งโดยพื้นฐานแล้วหมายความว่าเกมจะทำงานเหมือนกันบนคอมพิวเตอร์ที่เร็วหรือช้า
‫ลองมาดูตัวอย่างตัวอย่างกัน หากผมอยากให้บางสิ่งเคลื่อนที่ไปทางซ้ายในแต่ละวินาที
‫นี่คือลักษณะที่ปรากฏบนเครื่องต่างๆ
‫ฉันมีคอมพิวเตอร์ที่ช้า
‫มันทำได้เพียงสิบเฟรมต่อวินาทีและคอมพิวเตอร์ที่รวดเร็วซึ่งสามารถทำได้ 100 เฟรมต่อวินาที
‫ตอนนี้ระยะเวลาของเฟรมเหล่านั้นแตกต่างกัน
‫ดังนั้นบนคอมพิวเตอร์ที่ช้า ระยะเวลาของเฟรมจึงเป็น 0 1 วินาที
‫ถ้าฉันสามารถใส่สิบตัวในหนึ่งวินาทีและบนคอมพิวเตอร์ที่เร็ว มันจะเป็น 0 01 วินาที น้อยกว่ามากเพราะสามารถดำเนินการต่างๆ
‫ได้เร็วขึ้น
‫การคำนวณเฟรมใช้เวลาไม่นาน
‫ดังนั้นหากฉันคูณด้วยระยะเวลาของเฟรม ฉันจะคูณหนึ่งหน่วยของฉันด้วยระยะเวลาของเฟรม
‫แล้วคุณจะเห็นมันใน 1/2
‫ดังนั้นเมื่อมีการดำเนินการ 10 เฟรม ฉันได้หนึ่งหน่วยของการเคลื่อนไหว
‫เดียวกันเป็นจริง
‫หากฉันดำเนินการเสร็จ 100 เฟรม ฉันยังคงได้รับการเคลื่อนไหวหนึ่งหน่วย
‫ผมเลยอยากท้าให้คุณคูณด้วยเวลาเดลต้า
‫สิ่งที่เราจะทำคือจำไว้ว่าเราสามารถคูณเวกเตอร์ด้วยค่าทศนิยมเพื่อปรับขนาดของมันได้
‫และวิธีที่เราทำได้ใน C++ คือการใช้ตัวดำเนินการ star
‫นั่นคือวิธีที่เราทำการคูณ
‫ไม่มีตัวดำเนินการเครื่องหมายคูณ
‫มันจะสับสนกับ X ดังนั้นเราจึงใช้ตัวดำเนินการรูปดาวเพื่อแสดงถึงการคูณ และฉันต้องการให้คุณรวบรวมและทดสอบผลลัพธ์ของคุณ
‫คูณด้วยเวลาเดลต้า คูณความเร็วด้วยเวลาเดลต้า และดูว่าเกิดอะไรขึ้น รวมทั้งวิดีโอและไปกันเลย
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫มันคือความเร็วของแพลตฟอร์มที่เราอยากจะคูณตรงนี้
‫ตอนนี้เราสามารถดึงมันออกมาเป็นตัวแปรแยกกัน แต่ที่จริงแล้ว เราสามารถคูณด้วยเวลาเดลต้าที่ท้ายบรรทัดนั้น
‫ข้างหน้าเครื่องหมายอัฒภาค เพราะมันอยู่ก่อนจุดสิ้นสุดของคำสั่ง
‫และสิ่งที่น่าสนใจที่นี่คือ มีลำดับความสำคัญของโอเปอเรเตอร์เกิดขึ้นตรงที่การคูณระหว่างความเร็วของแพลตฟอร์มและเวลาเดลต้าจะเกิดขึ้นก่อนการเพิ่มตำแหน่งปัจจุบัน
‫ตอนนี้เป็นไปตามกฎทางคณิตศาสตร์ปกติสำหรับรายการกฎเหล่านั้นทั้งหมด
‫ฉันจะไม่ลงรายละเอียดที่นี่ แต่คุณสามารถดูหน้าลำดับการดำเนินการบน
‫Wikipedia ได้
‫มีกฎมากมายในภาษาต่างๆ ไม่ว่าจะเป็นมวลกาย มวลประมูล มวลเท้า มวลเตียง
‫มีคำย่อต่างๆ มากมาย
‫ไม่ว่าคุณจะโตมากับอะไรก็ตาม นั่นคือสิ่งที่ผมอยากจะแนะนำให้คุณใช้
‫สำหรับฉันมันคือมวลกาย แต่ที่อื่นมันต่างออกไป
‫ดังนั้นจึงน่าสังเกตว่าเราสามารถเขียนมันแบบนี้ได้ แต่ถ้าเราต้องการให้มันแน่ใจว่ามีบางอย่างเกิดขึ้นในลำดับที่ต่างไปจากเดิม
‫คุณสามารถใช้วงเล็บเพื่อระบุสิ่งนี้ได้
‫ผมทำได้ เพื่อทำให้ทุกอย่างชัดเจนขึ้น ผมจะใส่วงเล็บรอบๆ การคูณนี้เพื่อแสดงให้คุณเห็นว่านั่นคือสิ่งที่เกิดขึ้น
‫ขั้นแรกให้คูณแล้วบวกกับตำแหน่งปัจจุบัน
‫ไปที่ Unreal แล้วทดสอบกัน
‫กำลังจะตี คอมไพล์ เสร็จแล้วมาตีเล่นกัน
‫และตอนนี้เราเห็นแท่นเคลื่อนที่ด้วยความเร็วปกติมากขึ้น เพราะจริงๆ แล้ว มันเคลื่อนที่ด้วยความเร็วหนึ่งเมตรต่อวินาที
‫ซึ่งก็ไม่เป็นไรสำหรับแท่นเคลื่อนที่
‫คุณจะเห็นได้ว่าสิ่งนี้ช่วยให้เราทั้งคู่ลดความเร็วลงได้ แต่ตอนนี้นี่คืออัตราเฟรม ความเร็วอิสระ
‫หากคอมพิวเตอร์ของฉันกำลังใช้งานไม่ได้เพราะมีอย่างอื่นเกิดขึ้นในพื้นหลัง คอมพิวเตอร์จะยังคงมีลักษณะเหมือนเดิมและเล่นเกมเหมือนเดิม
‫สิ่งที่ดี
‫แล้วพบกันใหม่ในบทเรียนหน้าครับ