‫สวัสดีและยินดีต้อนรับกลับ
‫ในวิดีโอนี้ เราจะพูดถึงวิธีที่เราสามารถเร่งความเร็วรถถังของเราได้
‫เราต้องการควบคุมความเร็วของรถถังของเรา
‫และตอนนี้เรากำลังส่งเวคเตอร์ตำแหน่งเดลต้านี้ไปเป็น add act ออฟเซ็ตในพื้นที่
‫และเราไม่สามารถควบคุมความเร็วของรถถังได้
‫มันเคลื่อนที่ค่อนข้างช้าจริงๆ
‫เราจะสร้างตัวแปรความเร็วที่เราสามารถใช้ควบคุมความเร็วนั้นได้
‫และเราจะคำนึงถึงอัตราเฟรมของเกมด้วย เนื่องจากเกมของเรากำลังเปลี่ยนอัตราเฟรมจากเฟรมหนึ่งไปอีกเฟรมหนึ่ง
‫เราไม่ได้เคลื่อนไหวอย่างสม่ำเสมอ
‫เพื่อพิจารณาอัตราเฟรมนั้น เราจะพูดถึงสิ่งที่เรียกว่าเดลต้าไทม์
‫ดังนั้นเราจึงอยู่ที่นี่ในการแก้ไข และถ้าฉันกดเล่น และฉันเริ่มเคลื่อนย้ายรถถังไปรอบๆ มันไม่ใช่สิ่งที่คุณจะสังเกตเห็นได้จริงๆ
‫แต่รถถังของเราไม่เคลื่อนที่ในอัตราที่สม่ำเสมอจากเฟรมหนึ่งไปอีกเฟรมหนึ่ง
‫และเหตุผลก็เพราะอัตราเฟรมของเราเปลี่ยนไป และด้านบนซ้ายของวิวพอร์ตมีเมนูแบบเลื่อนลงเล็กน้อย
‫ถ้าฉันคลิก จะมีช่องทำเครื่องหมายถัดจากแสดง DPS PES หมายถึงเฟรมต่อวินาที
‫ถ้าฉันตรวจสอบสิ่งนี้ ที่ด้านบนขวา ฉันเห็นเฟรมต่อวินาที
‫และด้านล่างนั้น ผ่านไปกี่มิลลิวินาทีตั้งแต่เฟรมสุดท้าย
‫และค่าเหล่านี้เปลี่ยนจากเฟรมหนึ่งไปอีกเฟรมหนึ่ง
‫ถ้าฉันกดเล่น คุณอาจจะพลาดไป แต่อัตราเฟรมลดลงแล้วกลับมาเพิ่มขึ้น เพราะในช่วงเริ่มต้นของเกม
‫มีหลายสิ่งหลายอย่างเกิดขึ้น
‫นักแสดงทุกคนต่างก็เรียกฟังก์ชันเริ่มต้นของพวกเขา และมีเบื้องหลังเบื้องหลังการตั้งค่าบางอย่างสำหรับโลกใบนี้
‫ตอนนี้ ถ้าฉันเริ่มเล่นเกม 120 แอพที่ฉันได้รับกำลังเปลี่ยนจากเฟรมหนึ่งไปอีกเฟรม แม้ว่ามันจะอยู่ประมาณ
‫120 แอพ
‫สาเหตุที่ทำให้เกิดการเคลื่อนไหวที่ไม่สอดคล้องกันก็เพราะเมื่ออัตราเฟรมลดลง การอัปเดตติ๊กเหล่านั้นจะถูกเรียกน้อยลง
‫และถ้าเราเคลื่อนรถถังนี้ด้วยจำนวนเท่ากันในแต่ละเฟรม เราก็จะอาศัยอัตราเฟรมนั้นเพื่อให้คงเส้นคงวา
‫เพื่อให้ได้การเคลื่อนไหวที่สม่ำเสมอนั้น
‫และเมื่อเกมมีความซับซ้อนมากขึ้น ความผันแปรของอัตราเฟรมก็จะยิ่งแย่ลงเรื่อยๆ
‫ดังนั้นเราจึงต้องแน่ใจว่าเรากำลังปรับเปลี่ยนโดยใช้สิ่งที่เรียกว่า Delta Time
‫ดังนั้นเวลาเดลต้าลึกลับนี้คืออะไร?
‫สมมุติว่าเรามีไทม์ไลน์นี้เริ่มต้นที่ 0 วินาทีและเพิ่มขึ้นเมื่อเวลาผ่านไป
‫เมื่อเวลาผ่านไป แสดงว่ามีการเรียกฟังก์ชันเห็บ
‫แต่สังเกตว่าฟังก์ชันติ๊กไม่สอดคล้องกันมาก
‫บางครั้งก็เรียกเร็วมากและบางครั้งก็เรียกน้อยกว่า
‫เนื่องจากคอมพิวเตอร์ของคุณต้องทำการคำนวณแบบเฟรมต่อเฟรม และบางครั้งการคำนวณเหล่านั้นใช้ทรัพยากรมากขึ้นจากคอมพิวเตอร์ของคุณ
‫และอาจทำให้อัตราเฟรมของเราช้าลง
‫ทีนี้ ตัวแปรเวลาเดลต้าที่เรามีในฟังก์ชันติ๊กคือระยะเวลาที่ผ่านไปตั้งแต่เฟรมที่แล้ว
‫นี่อาจเป็น 0 1 วินาที
‫มันขึ้นอยู่กับการใช้งาน CPU และวิธีการที่แตกต่างกันออกไป
‫เนื่องจากการใช้งาน CPU ของคุณแตกต่างกันไป เวลาเดลต้าของคุณก็จะแตกต่างกันไปด้วย
‫และนี่หมายความว่าเมื่อเรามีเฟรมต่อวินาทีมากขึ้น เราก็มีการเรียกใช้ฟังก์ชันมากขึ้น
‫ตอนนี้ถ้าเราเรียก add-actor local offset บ่อยขึ้น เราจะเห็นบ่อของเราเคลื่อนที่เร็วขึ้น และจะไม่มีอัตราการเคลื่อนที่สม่ำเสมอ
‫วิธีแก้ไขคือปรับขนาดการเคลื่อนไหวตามเวลาเดลต้า
‫ดังนั้นถ้าเวลาเดลต้าเป็น 0 1 และเราต้องการย้ายบ่อของเราไป 10 เซนติเมตรต่อวินาที
‫ปรับขนาดการเคลื่อนไหวนั้นเป็น 0 1 วินาทีให้จำนวนการเคลื่อนไหวที่แน่นอนที่เราต้องการสำหรับเวลาอัปเดตเฟรมที่
‫0 1 วินาที
‫ตอนนี้ให้พิจารณาส่วนนี้ตรงนี้ ซึ่งเรามีเวลาเดลต้าน้อยกว่า ซึ่งหมายความว่า TIC ถูกเรียกบ่อยขึ้น
‫สมมุติว่าเวลาเดลต้าตรงนี้คือ 0 0 1 วินาที
‫ดังนั้น TIC จึงถูกเรียกบ่อยกว่าที่นี่สิบเท่า
‫ทีนี้ เราสามารถปรับขนาดการเคลื่อนไหวของเราเป็น 0 ได้ 01 สำหรับเฟรมเฉพาะนี้ และด้วยวิธีนี้ เราจะย้ายบ่อของเรา
‫10 เซนติเมตรต่อวินาทีครั้ง 0 0 1 วินาที
‫ดังนั้นเราจึงย้ายบ่อเพียงเล็กน้อย เนื่องจาก TIC ถูกเรียกบ่อยกว่ามาก
‫การทำเช่นนี้ทำให้มั่นใจได้ว่าบ่อของเราจะเคลื่อนที่ในลักษณะที่สอดคล้องกันโดยไม่ขึ้นกับการเปลี่ยนแปลงของอัตราเฟรม
‫กลับมาที่นี่ในโค้ด VSE ลองคิดดูว่าเราต้องการดูแลปัญหานี้อย่างไร
‫เรามีเวกเตอร์ตำแหน่งเดลต้าและเรากำลังตั้งค่า x ให้เท่ากับค่า แต่เรารู้ว่าเราต้องการปรับขนาดตามเวลาเดลต้า
‫ฉันจะใส่ความคิดเห็นเล็กน้อยที่นี่และบอกว่า X เท่ากับค่าคูณ เวลาเดลต้า หมายความว่าเราต้องการปรับขนาดค่าตามเวลาเดลต้า
‫เมื่อเราทำเช่นนี้ เราจะสร้างมูลค่าให้น้อยมาก เพราะตัวเวลาเดลต้านั้นเป็นค่าที่น้อยมาก
‫โดยเฉพาะอย่างยิ่งถ้าอัตราเฟรมของคุณสูงมาก
‫เราต้องขยายขนาดด้วยบางอย่างด้วย
‫ตัวแปรความเร็วอื่น ๆ และเราสามารถตัดสินใจได้ว่าค่านี้ควรเป็นเท่าใดเพื่อควบคุมความเร็วของรถถัง
‫ดังนั้นเราจึงมี pseudocode เล็กน้อยที่นี่เพื่อเป็นแนวทางแก่เรา และตอนนี้เราเพียงแค่ต้องใช้สิ่งนี้โดยการสร้างค่าสำหรับความเร็วและค้นหาว่าเราจะได้รับค่าเวลาเดลต้านี้ได้อย่างไร
‫เรามาพูดถึงวิธีที่เราสามารถเข้าถึงเวลาเดลต้าจากฟังก์ชันการย้ายกัน
‫ตอนนี้ Unreal Engine มีหลายวิธีในการระงับเวลาเดลต้า
‫ที่จริงแล้ว ถ้าคุณดูที่ฟังก์ชันติ๊กที่เรามีในฐานของเดลต้า เวลาคือพารามิเตอร์อินพุตแบบโฟลต
‫ดังนั้นหากเราทำงานในฟังก์ชันติ๊ก เราสามารถเข้าถึงเวลาเดลต้าได้แล้ว แต่ในแท็งก์ DHCP ฟังก์ชันการเคลื่อนที่ของเราไม่มีพารามิเตอร์อินพุตนั้น
‫แต่เอ็นจิ้น Unreal มีวิธีของมันอยู่
‫วิธีหนึ่งคือการเข้าถึงฟังก์ชันที่เรียกว่า get world delta seconds ซึ่งมีอยู่ในคลาสที่เรียกว่า U gameplay
‫statics
‫ตามชื่อที่แนะนำให้คุณเล่นเกมสแตติกมีฟังก์ชันสแตติกมากมายที่ช่วยในการเขียนโปรแกรมการเล่นเกม
‫รับ World Delta seconds ส่งคืนเวลาเดลต้า
‫ตอนนี้มีพารามิเตอร์อินพุตแล้ว
‫นี่มันต้องใช้วัตถุบริบทโลก
‫คุณจะเห็นสิ่งนี้มากมายใน Unreal Engine
‫ฟังก์ชันสแตติกจำนวนมากต้องการออบเจ็กต์บริบทโลก
‫โลกเป็นวัตถุประเภทคุณโลก
‫เป็นวัตถุระดับสูงสุดของเกมของเรา
‫มันแสดงถึงแผนที่ของเราซึ่งมีวัตถุที่เกี่ยวข้องทั้งหมดในเกมของเรา
‫ตอนนี้ฟังก์ชันแบบคงที่ เช่น รับวินาทีเดลต้าโลก ไม่รู้ว่าเราอยู่ในโลกไหน
‫เราต้องบอกฟังก์ชันนี้ว่าเราอยู่ในโลกใด เพื่อให้สามารถเข้าถึงโลกนั้นและรับค่าเวลาเดลต้านั้นได้
‫ทีนี้ เพื่อที่จะบอกว่าเราอยู่ในโลกไหน เราสามารถส่งต่อตัวชี้ไปยังวัตถุที่มีอยู่ในโลกนั้นได้
‫ในขณะที่เราทำงานในคลาสรถถัง เราสามารถส่งต่อคีย์เวิร์ดนี้
‫นี่คือคีย์เวิร์ดที่เราสามารถใช้ได้ในคลาสใดก็ได้ใน C++
‫คำสำคัญนี้คืออะไร เป็นตัวชี้ไปยังอินสแตนซ์ของวัตถุใด ๆ ที่เรากำลังทำงานอยู่
‫ดังนั้นหากเราทำงานในประเภทรถถัง นี่คือตัวชี้ไปยังรถถังที่เราอยู่
‫ดังนั้นฟังก์ชั่นที่ต้องใช้วัตถุบริบทของโลกมักจะได้รับสิ่งนี้เป็นพารามิเตอร์อินพุตเนื่องจากรถถังที่เรากำลังดำเนินการอยู่ในโลกที่ถูกต้อง
‫ดังนั้น ให้เวลาโลกของเดลต้ารู้ว่ามันอยู่ในโลกใด และสามารถดึงเดลต้าที่เหมาะสมกลับมาให้เราได้
‫เวลาสำหรับโลกนั้น
‫ดังนั้นหากเราเรียก get world delta seconds จากภายในคลาส -- เราจะส่งต่อสิ่งนี้เป็นวัตถุบริบทโลก
‫ตอนนี้คุณมีเครื่องมือทั้งหมดที่จำเป็นในการควบคุมความเร็วของรถถังแล้ว
‫ดังนั้นสิ่งที่คุณจะทำคือสร้างตัวแปรความเร็ว ทำให้สิ่งนี้เป็นทุ่น และวางไว้ในส่วนส่วนตัวในคลาสรถถัง
‫ตอนนี้เปิดเผยสิ่งนี้กับพิมพ์เขียวเพื่อให้เราสามารถปรับเปลี่ยนในขณะที่เรากำลังพัฒนา
‫ซึ่งหมายความว่าคุณจะให้ทรัพย์สินแก่คุณและใช้ตัวระบุคุณสมบัติที่เหมาะสมของคุณซึ่งสอดคล้องกับระดับการเปิดเผยที่คุณต้องการ
‫ตอนนี้ในฟังก์ชัน MOV เรามีโค้ดปลอมที่เราใส่ไว้เป็นความคิดเห็น
‫เพื่อใช้เป็นแนวทาง
‫คุณจะใช้ตำแหน่งเดลต้า เวกเตอร์ F และมาตราส่วน
‫มันคือ X ตามเวลาเดลต้า
‫เราเพิ่งเห็นว่าเราสามารถเข้าถึงเวลาเดลต้าโดยใช้สถิติการเล่นเกม U ได้อย่างไร
‫และคุณยังจะขยายขนาด X ด้วยตัวแปรความเร็วด้วย
‫ตอนนี้ เนื่องจากเรากำลังใช้ฟังก์ชันในสถิติการเล่นเกม คุณจะต้องรวมไฟล์ส่วนหัวสำหรับสถิติการเล่นเกมด้วย
‫ตอนนี้ฉันได้แสดงให้คุณเห็นหลายครั้งแล้วว่าฉันพบการรวมสำหรับคลาสใดคลาสหนึ่งโดยใช้เอกสารประกอบของ Unreal
‫Engine ได้อย่างไร
‫ดังนั้นฉันจะขอท้าให้คุณค้นหาสถิติการเล่นเกมของคุณในเอกสาร Unreal Engine และค้นหาไฟล์ส่วนหัวนั้น
‫และถ้าคุณหามันไม่เจอ เพียงแค่หาลิงค์ในแหล่งข้อมูลสำหรับวิดีโอนี้ ซึ่งจะให้เอกสารประกอบสำหรับสถิติการเล่นเกมของคุณ
‫แต่พยายามค้นหามันด้วยตัวเอง
‫ก่อนอื่นให้หยุดวิดีโอชั่วคราวและควบคุมความเร็วของรถถังทันที
‫ตกลง.
‫ดังนั้นฉันจึงมีโค้ดหลอกเพื่อเป็นแนวทาง และฉันต้องปรับขนาดค่าตามเวลาเดลต้าและด้วยความเร็ว
‫ก่อนอื่นฉันจะสร้างตัวแปรความเร็วของฉัน
‫ตอนนี้กลับมาในถัง h.
‫ที่นี่ฉันสามารถวางตัวแปรความเร็วได้
‫อย่างไรก็ตาม หากคุณจำจากการฝึกซ้อมในการบรรยายก่อนหน้านี้ ฉันได้เพิ่มทุ่นที่เรียกว่า Speed
‫ลงในคลาส Base Pond
‫ตอนนี้ฉันไม่ต้องการตัวแปรความเร็วในบ่อฐาน
‫นี่เป็นเพียงการฝึกฝน ดังนั้นฉันจึงไม่ต้องการมันจริงๆ
‫อันที่จริง ฉันไม่ต้องการอีก 30 สองตัวที่ฉันสร้างขึ้นเพื่อแสดงให้เห็นว่าคุณเป็นผู้ระบุคุณสมบัติ
‫ผมจะเน้นสิ่งเหล่านี้ทั้งหมดแล้วลบออกจากคลาสบ่อฐาน
‫ฉันไม่ต้องการพวกเขาอีกต่อไป
‫ดังนั้นพวกเขาจึงหายไป
‫ตอนนี้ คุณอาจจำได้ว่าฉันได้อ้างอิงตัวแปรความเร็วนั้นในพิมพ์เขียวของบ่อเลี้ยง
‫เลยจะเปิดบ่อบีพี
‫และที่นี่ในกราฟเหตุการณ์ มีตัวแปรความเร็วที่ฉันอ้างอิง
‫เนื่องจากฉันไม่ต้องการสิ่งนี้อีกต่อไปแล้ว ฉันจะดำเนินการต่อและลบโหนดเหล่านั้นและรวบรวมและบันทึกถังบ่อ
‫BP ของฉัน
‫ตกลง.
‫หลังจากทำความสะอาดทั้งหมดแล้ว ฉันจะกลับไปที่แทงค์เพื่อเพิ่มตัวแปรความเร็วของฉัน
‫และนี่จะอยู่ในส่วนส่วนตัวที่นี่
‫ฉันจะเพิ่มมันเหนือฟังก์ชันย้ายและมันจะเป็นทุ่นที่เรียกว่าความเร็ว
‫ตอนนี้ผมจะให้ค่าเริ่มต้นตรงนี้
‫ฉันคิดว่าฉันจะลอง 200 F และดูว่ามันทำงานอย่างไร
‫แต่เนื่องจากฉันต้องการแก้ไขสิ่งนี้ในตัวแก้ไขในขณะที่ฉันกำลังพัฒนา มันจะได้รับมาโครคุณสมบัติใหม่และฉันต้องการจะสามารถแก้ไขได้ในอินสแตนซ์และค่าเริ่มต้น
‫ดังนั้นฉันจะแก้ไขได้ทุกที่
‫ตอนนี้ คุณไม่จำเป็นต้องทำเช่นนี้ แต่ฉันให้หมวดหมู่
‫ฉันจะสร้างหมวดหมู่ใหม่ที่เรียกว่าการเคลื่อนไหว
‫ตอนนี้ การเปิดเผยไปยังกราฟเหตุการณ์เป็นทางเลือก
‫ฉันจะระงับเรื่องนั้นไว้เพราะฉันไม่คิดว่าจะต้องเข้าถึงมันในกราฟเหตุการณ์
‫ถ้าฉันต้องการ
‫ในอนาคต ฉันสามารถเปิดเผยมันด้วยพิมพ์เขียว อ่าน เขียน หรือพิมพ์เขียวอ่านอย่างเดียว และใช้เมตาที่อนุญาตการเข้าถึงแบบส่วนตัวระบุ
‫แต่สำหรับตอนนี้ฉันจะไม่ไป
‫ดังนั้นฉันจึงมีตัวแปรความเร็วและในถัง DHCP ฉันจะใช้ค่าและปรับขนาดด้วยความเร็ว
‫สิ่งสุดท้ายที่ต้องทำคือสเกลค่าตามเวลาเดลต้า ซึ่งหมายความว่าฉันต้องการให้คุณเล่นเกมสแตติก
‫นี่คือเอกสารของ Unreal Engine
‫ฉันจะไปข้างหน้าและค้นหาสถิติการเล่นเกมของคุณและนี่คือสถิติการเล่นเกมของคุณ
‫ดังนั้นฉันต้องเลื่อนลงไปที่บรรทัดรวมแล้วคัดลอกสิ่งนี้และกลับไปที่ถัง CP
‫แปะได้ค่ะ
‫ตอนนี้ฉันสามารถเข้าถึงสถิติการเล่นเกมแบบใหม่ได้แล้ว ฉันสามารถรับเวลาเดลต้าได้ ดังนั้นฉันจะคูณคุณเอง
‫สถิติการเล่นเกมได้รับวินาทีเดลต้าของโลก และอย่างที่เราเห็น สิ่งนี้ต้องการออบเจ็กต์บริบทของโลก
‫คุณสามารถดูได้ด้วยป๊อปอัปที่ขอวัตถุบริบทโลก
‫ดังนั้นฉันจะผ่านในนี้
‫ตอนนี้ฉันกำลังตั้งค่าตำแหน่งเดลต้า X ให้มีค่ากับเวลา ความเร็ว ครั้ง เวลาเดลต้า ฉันจะรวบรวมสิ่งนี้
‫ดังนั้นเราจึงมีการรวบรวมที่ประสบความสำเร็จ
‫กลับมาที่นี่ในเครื่องมือแก้ไข ฉันสามารถไปที่ BP Pond Tank และความเร็วของฉันอยู่ตรงนั้น
‫และถ้าฉันเลือกตัวอย่างของรถถังในโลกนี้ ฉันสามารถค้นหาในแผงรายละเอียดสำหรับการเคลื่อนที่ และมีความเร็ว
‫และฉันสามารถตั้งค่าให้เป็นค่าใดก็ได้ที่ฉันชอบ
‫ถ้าฉันเหวี่ยงมันขึ้นมาแล้วตีเล่น ฉันก็เคลื่อนไหวเร็วขึ้นอีกหน่อย
‫นี่คือข้อดีของการเปิดเผยตัวแปรไปยังพิมพ์เขียว
‫ฉันสามารถทดลองและค้นหาความเร็วที่เหมาะสมกับฉันได้
‫เอาล่ะ มันดูดีมาก
‫ฉันจะดำเนินการต่อและหยุดแสดง FPSO เดี๋ยวนี้
‫และตอนนี้เรามีตัวแปรความเร็วแล้วและเราสามารถเปลี่ยนมันได้
‫และการเปลี่ยนแปลงนั้นจะสะท้อนให้เห็นในการเคลื่อนไหวของตัวจำนำของฉัน
‫ตอนนี้เรากำลังควบคุมความเร็วในการเคลื่อนที่ของรถถังของเรา และเรามีตัวแปรความเร็วที่ดีที่เราเปิดเผยต่อพิมพ์เขียว
‫และเราสามารถตั้งค่าได้ในขณะที่เรากำลังพัฒนาการทดสอบด้วยคุณค่าของมัน
‫นอกจากนี้เรายังได้เรียนรู้เกี่ยวกับเวลาเดลต้าและเหตุใดการปรับขนาดการเคลื่อนไหวของเราตามเวลาเดลต้าจึงสำคัญ
‫ดังนั้นอัตราเฟรมจึงเป็นอิสระจากการเปลี่ยนแปลงอัตราเฟรมจะยังคงราบรื่นและการเคลื่อนไหวที่สม่ำเสมอกับรถถังของเรา
‫เมื่อมองย้อนกลับไปที่แผนส่วนของเรา เราเกือบจะเสร็จสิ้นแล้วกับหัวข้อย่อยแรกของเรา
‫เราได้สร้างรถถังและสามารถเคลื่อนที่ไปทั่วโลกได้
‫จุดที่สองของเราคือจัดการกับการป้อนข้อมูลด้วยการเคลื่อนไหวของแป้นพิมพ์ WASD และการป้อนข้อมูลด้วยเมาส์ด้วย
‫เรามีส่วน W และ SW ลง แต่เรายังคงต้องใช้ปุ่ม A และ D และเราจะใช้มันเพื่อหมุนรถถัง
‫ดังนั้นเราจึงมีความคืบหน้าที่ดีในวิดีโอที่จะมาถึง
‫เราจะพยายามทำให้ความสามารถในการเคลื่อนย้ายรถถังของเราเสร็จสิ้น
‫เจอกันใหม่ครับ