‫สวัสดีและยินดีต้อนรับกลับ
‫ในวิดีโอนี้ เราจะเริ่มพูดถึงวิธีการเคลื่อนย้ายรถถังของเรา
‫ดังนั้นในการเคลื่อนย้ายรถถัง เราจะต้องเพิ่มออฟเซ็ตและเครื่องยนต์ที่ไม่สมจริง
‫เมื่อพูดถึงการเพิ่มออฟเซ็ต เราต้องตัดสินใจว่าจะทำออฟเซ็ตในพื้นที่ท้องถิ่นกับพื้นที่โลก
‫เรามาพูดถึงความแตกต่างระหว่างสองสิ่งนี้กัน
‫ในตอนนี้ ในตัวแก้ไข ฉันมี -- รถถังที่เลือก และทันทีที่ฉันเลือกสิ่งนี้ คุณจะสังเกตเห็นว่ามี
‫Gizmo
‫นี่แหละที่เรียกว่ากิซโม
‫มีสามลูกศรและแต่ละสีต่างกัน
‫ตอนนี้ หากคุณไม่ได้สังเกต ที่ด้านล่างซ้ายของหน้าจอจะมีอุปกรณ์ขนาดเล็กอีกอันหนึ่งอยู่ที่ด้านซ้ายล่างของหน้าจอ
‫และหน้าตาแบบนี้ก็คล้ายกับกิซโมของนักแสดงที่เราเลือก
‫ดังนั้นถ้าฉันเลือกนักแสดงคนใด เราก็มักจะได้กิซโมนี้
‫และแน่นอน Gizmo เปลี่ยนไปเมื่อเราเปลี่ยนจากการแปลเป็นหมุนเป็นโหมดมาตราส่วน
‫ตราบใดที่เราอยู่ในการแปล ซึ่งเราสามารถเข้าถึงได้จากไอคอนซ้ายสุดนี้ที่ด้านบนขวาของวิวพอร์ตหรือด้วยปุ่ม
‫W เราก็สามารถย้ายสิ่งของหรือแปลได้โดยการลากบนลูกศรอันใดอันหนึ่งบน กิซโม่
‫และสีจะสอดคล้องกับแกนสีแดง เนื่องจากแกน x สีเขียวคือแกน y และสีน้ำเงินคือแกน z
‫ทีนี้ ถ้าเราหมุนมุมมองของเราและมองไปในทิศทางอื่น เราจะเห็นว่ากิซโมนั้นยังคงชี้ไปในทิศทางเดิม
‫และในขณะที่เราหมุนไปรอบๆ Gizmo ที่ด้านล่างซ้ายของวิวพอร์ตจะหมุนเพราะทิศทางของโลกไม่เปลี่ยนแปลง
‫จนถึงตอนนี้ดีมาก
‫สิ่งที่เรากำลังมองหาคือทิศทางของอวกาศของโลก แต่สำหรับนักแสดงแต่ละคนในโลก มีทิศทางในท้องถิ่น
‫และเราสามารถเห็นได้ว่าโดยการคลิกที่ไอคอนนี้ซึ่งดูเหมือนโลกและป๊อปอัปบอกว่าเป็นวัฏจักร
‫Gizmo การแปลงจะประสานระบบระหว่างโลกกับพื้นที่ท้องถิ่น
‫เมื่อเราเห็นโลกที่นี่ หมายความว่าเรากำลังดูพื้นที่โลก แต่ถ้าเราคลิกมัน
‫มันจะกลายเป็นลูกบาศก์ และตอนนี้เรากำลังดูพื้นที่ท้องถิ่นสำหรับนักแสดงที่เราเลือกไว้
‫Gizmo ที่ด้านล่างซ้ายของวิวพอร์ตยังคงแสดงให้เราเห็นถึงพื้นที่ของโลก
‫แต่ถ้าฉันใช้นักแสดงคนนี้และสลับไปที่โหมดการหมุนแล้วหมุนมัน จากนั้นเมื่อฉันกลับไปที่โหมดการแปล
‫คุณจะเห็นว่าตอนนี้ Gizmo ชี้ไปในทิศทางที่ต่างไปจากเดิม
‫ตัวนักแสดงเองมีแกน x ในพื้นที่ของตัวเอง
‫เราสามารถนึกถึงแกน x ของนักแสดงเป็นเวกเตอร์ไปข้างหน้าได้
‫ตอนนี้สังเกตว่าที่ด้านล่างซ้ายของหน้าจอที่ gizmo ยังคงชี้ไปในทิศทางเดียวกัน
‫แต่นักแสดงที่นี่ โรงรับจำนำ มีทิศทาง X ในพื้นที่ของตัวเอง และมันชี้ไปในทิศทางที่ต่างออกไป
‫ตอนนี้ ถ้าฉันคลิกที่ลูกบาศก์ที่นี่แล้วเปลี่ยนมันกลับเป็นโลกในตอนนี้ Gizmo สำหรับรถถังจะจับคู่และปรับให้เข้ากับทิศทางของแกนโลก
‫เพื่อให้เราสามารถสลับไปมาระหว่างโลกและพื้นที่ในท้องถิ่นเพื่อให้นักแสดงคนใดคนหนึ่งเห็นในท้องถิ่น
‫ทิศทางกับทิศทางของโลก
‫เราจึงเห็นว่าสำหรับนักแสดงที่เราเลือกในโลกของเรา นักแสดงก็มีทิศทางท้องถิ่นของตัวเอง
‫และนี่อาจจะใช่หรือไม่แตกต่างไปจากทิศทางของโลกตามที่แสดงไว้ในภาพนี้ก็ได้
‫ดังนั้นสิ่งนี้จึงสำคัญมากเมื่อพูดถึงการเคลื่อนย้ายวัตถุใน Unreal Engine
‫มีฟังก์ชันสำหรับเคลื่อนย้ายวัตถุและมีชุดฟังก์ชันที่แตกต่างกันสำหรับการเคลื่อนที่ในอวกาศโลกกับพื้นที่ในท้องถิ่น
‫สมมุติว่ารถถังของเราหันหน้าไปทางนี้ และแกน x ของมันชี้ไปทางซ้ายเล็กน้อย ตามที่ระบุโดยลูกศรที่ผมวาดไว้บนรถถัง
‫ตอนนี้เราสามารถเห็นได้จากกิซโมนี้ที่ด้านล่างซ้าย ว่าทิศทางแกน x ของโลกชี้ไปทางขวา
‫ดังนั้นถังจึงไม่อยู่ในแนวเดียวกับทิศทางของอวกาศโลก
‫สมมุติว่าเราต้องย้ายรถถังนี้ไปในอวกาศโลกในทิศทางบวก X
‫จากนั้นแม้ว่ารถถังจะชี้ไปทางซ้าย แต่มันก็ยังเคลื่อนที่ไปในทิศทาง x ของโลกนั้นและดูเหมือนว่ามันกำลังถอยหลัง
‫นั่นไม่ใช่สิ่งที่เราต้องการ
‫ในทางกลับกัน สมมุติว่าเราใช้ฟังก์ชันที่ออกแบบมาเพื่อเคลื่อนย้ายรถถังในพื้นที่ของตัวเอง
‫นั่นหมายความว่า ถ้าเราเคลื่อนรถถังไปในทิศทาง X ในพื้นที่ของมัน มันจะเคลื่อนไปข้างหน้าในทิศทางที่คุณคาดหวัง
‫และนั่นคือพฤติกรรมที่เราต้องการ
‫ตอนนี้อยู่ใน Unreal Engine
‫ฟังก์ชันที่สามารถทำได้สำหรับเราเรียกว่า Add Actor Local Offset
‫ฟังก์ชันนี้ย้ายนักแสดงไปในทิศทางท้องถิ่น
‫ตอนนี้ใช้การชดเชยซึ่งเป็นการเคลื่อนไหวครั้งเดียว
‫โดยพื้นฐานแล้ว เราบอกทิศทางที่จะเคลื่อนที่และระยะทาง และวัตถุนั้นเคลื่อนที่เพียงครั้งเดียว ซึ่งหมายความว่าเราจะเรียกใช้ฟังก์ชันนี้ทุกเฟรมที่เราต้องการย้ายรถถัง
‫ดังนั้นเราจะย้ายทีละน้อยตั้งแต่เรียกใช้ฟังก์ชันทุกเฟรม
‫หมายความว่าตอนนี้เรากำลังเรียกมันมากสำหรับรถถังของเรา แกน X ในพื้นที่ของตัวเองคือทิศทางไปข้างหน้า
‫นี่คือแกนที่เราจะใช้เมื่อเราเพิ่มออฟเซ็ตในพื้นที่
‫ต่อไปนี้คือเอกสารประกอบของ Unreal Engine สำหรับ ADD actor local offset
‫คุณเห็นว่ามันเป็นฟังก์ชั่นที่เป็นของคลาสนักแสดง
‫นั่นเป็นเหตุผลที่เรียกว่า add actor local offset เพราะมันมีอยู่ในคลาสนักแสดง
‫เบี้ยจะสืบทอดฟังก์ชันนี้เพื่อให้เราใช้งานได้
‫นี่คือไวยากรณ์
‫มีพารามิเตอร์อินพุตสี่ตัว
‫อย่างแรกคือเวกเตอร์ F ที่เรียกว่าตำแหน่งเดลต้า
‫ดังนั้น เราจะต้องสร้างเวกเตอร์ F ที่เราสามารถส่งผ่านไปยังฟังก์ชันออฟเซ็ตในพื้นที่ของตัวเพิ่มได้
‫ดังนั้นเราจึงรู้เกี่ยวกับออฟเซ็ตของนักแสดงเสริมนี้
‫และฉันต้องการทดลองกับสิ่งนี้เพื่อดูว่ามันทำงานอย่างไร เพื่อให้เราทำสิ่งนี้ได้ในฟังก์ชันติ๊ก
‫ตอนนี้เราไม่ได้เขียนทับฟังก์ชัน tic ที่นี่ในคลาสรถถัง แต่เรามีอยู่ในคลาสเบสปอง
‫ถ้าเราไปที่ CP บ่อฐานตรงนี้ เรามีฟังก์ชัน tic และเราไม่ได้ทำอะไรที่นี่ และนี่เหมาะที่จะทำการทดลอง
‫สิ่งที่ผมจะทำคือพิมพ์ แอด นักแสดง โลคัลออฟเซ็ตแบบนั้น
‫และฉันจะคลิกขวาแล้วเลือกไปที่คำจำกัดความ
‫ในไฟล์ CP ของนักแสดง เรามีคำจำกัดความสำหรับ ADD Actor Local Offset
‫ตอนนี้สังเกตเห็นสิ่งที่น่าสนใจ
‫กำลังตรวจสอบว่าองค์ประกอบรูทไม่เป็นโมฆะหรือไม่และหากไม่ใช่ค่าว่างก็จะเรียกฟังก์ชันนี้ว่าเพิ่มออฟเซ็ตในเครื่อง
‫สิ่งที่เรากำลังทำอยู่คือการเพิ่มออฟเซ็ตให้กับองค์ประกอบรูท
‫และเนื่องจากส่วนประกอบอื่นๆ ทั้งหมดติดอยู่กับส่วนประกอบรูท พวกมันก็จะเคลื่อนที่ไปพร้อมกับส่วนประกอบนั้น
‫ดังนั้นจึงเป็นเรื่องสำคัญที่จะต้องทราบว่าเมื่อเราเพิ่มออฟเซ็ตในพื้นที่ เรากำลังย้ายองค์ประกอบรูท
‫และส่วนอื่นๆ ก็เคลื่อนไหวตามไปด้วย
‫ตอนนี้ หากเราวางเมาส์เหนือเพิ่มออฟเซ็ตในเครื่อง เราจะเห็นว่าพารามิเตอร์อินพุตทั้งสี่รายการแสดงอยู่ที่นี่
‫และนอกเหนือจากอันแรก ซึ่งก็คือเวกเตอร์ F อันอื่นมีค่าเริ่มต้น
‫สังเกต bool B กวาดมันบอกว่าเท่ากับเท็จ
‫พารามิเตอร์อินพุตที่สามและสี่ยังมีค่าเริ่มต้นเหล่านี้
‫ซึ่งหมายความว่าหากเราเรียกใช้ฟังก์ชันนี้และไม่ส่งผ่านอินพุตสำหรับพารามิเตอร์อินพุตสามตัวล่าสุด พารามิเตอร์เหล่านี้จะถูกตั้งค่าเป็นค่าเริ่มต้น
‫ตอนนี้ฉันกำลังจะปิด CP ของนักแสดงและที่นี่ในฟังก์ชัน base pond tick ฉันต้องการเรียก add actor local offset
‫แต่ละเฟรมเพื่อดูว่ามันทำงานอย่างไร
‫ตอนนี้เรารู้แล้วว่าพารามิเตอร์อินพุตตัวแรกคือเวกเตอร์ F
‫เรียกว่าตำแหน่งเดลต้า
‫นี่คือจำนวนการเคลื่อนไหวที่เราต้องการเพิ่มทุกครั้งที่เราเรียกใช้ฟังก์ชันนี้
‫ฉันจะสร้างเวกเตอร์ F ชื่อตำแหน่งเดลต้า
‫ดังนั้น F ตำแหน่งเดลต้าเวกเตอร์
‫ทีนี้ผมอยากเอาเวกเตอร์นี่ศูนย์
‫ตรวจสอบให้แน่ใจว่าได้เริ่มต้นด้วยศูนย์ทั้งหมด
‫ตอนนี้ฉันต้องการเวกเตอร์ศูนย์ที่ฉันสามารถส่งผ่านศูนย์ f ได้ an x, y และ z ทั้งหมดจะได้ 0 f
‫ดังนั้นสิ่งนี้จะตอบสนองวัตถุประสงค์ของฉันได้ดี
‫ตอนนี้ฉันกำลังจะใช้ Delta Location X และฉันจะเปลี่ยนเป็นจุด F สองจุด
‫ด้วยวิธีนี้ เรามีเวกเตอร์โดยตั้งค่า Y และ Z เป็นศูนย์, x ตั้งค่าเป็นสอง
‫ดังนั้นฉันจะไปข้างหน้าและส่งต่อตำแหน่งเดลต้าไปยังการเพิ่มออฟเซ็ตในพื้นที่ของนักแสดงเพื่อเป็นการทดลอง
‫ตอนนี้ฉันสามารถหลีกเลี่ยงการเรียก add actor local offset และเพียงแค่ส่งผ่านพารามิเตอร์อินพุตแรกเนื่องจากอีกสามตัวเลือกเป็นทางเลือก
‫ฉันจะรวบรวมสิ่งนี้และดูว่าเกิดอะไรขึ้น
‫ทีนี้ถ้าเราไปข้างหน้าและตีเล่น สังเกตสองสามสิ่ง
‫ก่อนอื่น ดูสิ หอคอยก็กำลังเคลื่อนที่ด้วย
‫นั่นเป็นเพราะเราใส่สิ่งนี้ในฟังก์ชันขีดสำหรับเบี้ยพื้นฐาน และพันธะทั้งสองนี้สืบทอดมาจากตัวจำนำพื้นฐาน
‫แท้จริงแล้ว บ่อเหล่านี้ทั้งหมดกำลังเคลื่อนที่
‫และสิ่งที่น่าสนใจก็คือ พวกมันทั้งหมดเคลื่อนที่ไปในทิศทางแกน x ของตัวเอง
‫เราสามารถเห็นทุกสิ่งเคลื่อนไหวได้ในทันทีจากมุมมองนี้
‫หากเราคลิกเมนูดรอปดาวน์ข้าง ๆ เพื่อเล่นและเลือกการจำลอง การทำเช่นนี้จะทำให้เราสามารถเล่นเกมได้โดยไม่ต้องมีบ่อใด
‫ๆ
‫ดังนั้นหากฉันคลิกจำลอง ให้ลองดู
‫ทุกบ่อเคลื่อนที่ไปในทิศทางแกน x ของมันเอง
‫อันที่จริงมันค่อนข้างแปลกและเจ๋งมาก
‫นี่จึงแสดงให้เราเห็นว่าการชดเชยในพื้นที่ของนักแสดงโฆษณาทำงานอย่างไร
‫มันเคลื่อนสิ่งต่าง ๆ ไปในทิศทางท้องถิ่น
‫ตอนนี้ เราสามารถออกจากโหมดจำลองได้โดยคลิกที่ดรอปดาวน์และเลือกวิวพอร์ตที่เลือก
‫ซึ่งจะทำให้เราสามารถเล่นในโหมดการเล่นปกติได้
‫เอาล่ะ ฉันจะหยุดสิ่งนี้ และเราสามารถกลับไปที่ฐาน -- และเราสามารถลบโค้ดทดลองนี้ได้
‫ฉันจะดำเนินการต่อและเพียงแค่ลบมันออกจากฟังก์ชันติ๊ก เพื่อให้เรารู้ว่าการเพิ่มนักแสดงในพื้นที่ทำงานอย่างไร
‫กลับไปที่ Tank CP และที่นี่เรามีฟังก์ชัน MOVE
‫เรารู้ว่าฟังก์ชันนี้ถูกเรียกทุกๆ เฟรม และเรารู้ว่าค่านั้นเท่ากับหนึ่ง
‫หากเรากดปุ่ม W และเป็นค่าลบ หากเรากดปุ่มและเป็นศูนย์หากเรากดทั้งสองอย่างหรือไม่ทั้งสองอย่าง
‫ดังนั้นสำหรับความท้าทายของคุณ คุณจะต้องย้ายรถถังโดยใช้การเพิ่มตัวแสดงในพื้นที่
‫ดังนั้นในฟังก์ชัน MOV คุณจะต้องสร้างเวกเตอร์ F ที่เรียกว่าตำแหน่งเดลต้า
‫ตอนนี้ตรวจสอบให้แน่ใจว่าได้ศูนย์ X, Y และ z เป็นศูนย์
‫คุณสามารถทำเช่นนี้ได้หลายวิธี เช่น การใช้ตัวสร้างเวกเตอร์ f แบบต่างๆ
‫ตอนนี้เมื่อคุณได้ศูนย์ส่วนประกอบทั้งหมดเป็นศูนย์ แล้วตั้งค่า x เป็นค่าของค่าพารามิเตอร์อินพุตแบบลอยในฟังก์ชัน
‫MOV
‫เมื่อคุณทำเสร็จแล้ว ไปข้างหน้าและโทรหา add actor local offset ที่ส่งผ่านในตำแหน่งเดลต้า
‫หยุดวิดีโอชั่วคราวและทำตอนนี้
‫ตกลง.
‫ดังนั้นฉันกลับมาที่นี่ในไฟล์ CP รถถัง
‫ตอนนี้ ฉันไม่ต้องการบันทึก EWI นี้แล้ว ฉันจะเอามันออกแล้วสร้างเวกเตอร์
‫F ชื่อตำแหน่งเดลต้า
‫ตอนนี้ฉันสามารถใช้หนึ่งในตัวสร้างเวกเตอร์ F ได้แล้ว
‫ฉันได้แสดงให้คุณเห็นถึงวิธีสร้างเวกเตอร์ใหม่ด้วยศูนย์ทั้งหมดแล้ว
‫ผมจะแสดงให้คุณเห็นอีกวิธีหนึ่ง ซึ่งก็คือ เริ่มต้นสิ่งนี้ด้วยเวกเตอร์ f, เวกเตอร์ศูนย์
‫และนี่คือสิ่งที่ดูเหมือน เป็นเวกเตอร์ที่มีศูนย์สำหรับแต่ละองค์ประกอบ
‫นี่เป็นเพียงการแสดงทางเลือกอื่นให้คุณเห็น
‫เราก็มีเวกเตอร์ศูนย์
‫ตอนนี้ฉันจะใช้ตำแหน่งเดลต้า X และตั้งค่าให้เท่ากับค่า
‫และในที่สุดฉันก็สามารถเรียก add actor local offset ที่ส่งผ่านในตำแหน่งเดลต้า
‫มารวบรวมสิ่งนี้และกลับมาที่นี่ในเครื่องมือแก้ไข ฉันจะนำรถถังของฉันไป และฉันจะปรับทิศทางให้มันหันไปทางโลก
‫X จากนั้นฉันก็สามารถเล่นและตอนนี้คลิกในวิวพอร์ต
‫ถ้าฉันกดปุ่ม W ฉันจะเดินหน้า และถ้าฉันกดปุ่ม ฉันจะถอยกลับ
‫ถ้าฉันกดทั้งสอง พวกเขาจะยกเลิกกัน และฉันไม่เคลื่อนไหวเลย
‫และแน่นอน ถ้าฉันไม่กดอะไรเลย ฉันก็จะไม่ขยับเช่นกัน
‫ตอนนี้เรามีการเคลื่อนที่สำหรับรถถังของเราแล้ว แต่มันช้าไปนิด ดังนั้นเราจึงต้องทำการปรับเปลี่ยนบางอย่าง
‫และเราจะพูดถึงการปรับกลไกการเคลื่อนไหวนี้อย่างละเอียดด้วยรถถังของเรา
‫โดยสรุป เราได้เรียนรู้เกี่ยวกับ ADD Actor, local offset และความแตกต่างระหว่างโลกกับอวกาศ
‫ในวิดีโอหน้า เราจะทำกลไกการเคลื่อนที่นี้ให้สมบูรณ์แบบด้วยรถถังของเรา
‫เจอกันเร็วๆนี้ครับ