‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะศึกษาแนวคิดของตัวแปรท้องถิ่น ตัวแปรที่มีอยู่ในฟังก์ชันที่กำหนดเท่านั้น
‫และเราจะมาดูกันว่าเราจะใช้สิ่งนี้เพื่อตั้งค่าตำแหน่งของเราเป็นค่าที่แตกต่างจากค่าที่เก็บไว้ในเวกเตอร์ของฉันได้อย่างไร
‫มาดำน้ำกันเถอะ
‫จนถึงตอนนี้ เราได้จัดการกับตัวแปรที่เป็นของคลาส
‫เราทำสิ่งนี้ใน Blueprint และตอนนี้เราทำใน C++ แล้ว
‫และนี่หมายความว่าตัวแปรจะมีชีวิตอยู่ตราบเท่าที่อินสแตนซ์ของคลาส
‫แต่ละอินสแตนซ์จะได้รับสำเนาของตัวแปรของตัวเอง แต่ในขณะที่อินสแตนซ์ของคลาสยังมีชีวิตอยู่ ตัวแปรนั้นจะมีสองค่า
‫แนวคิดนี้ที่ฉันเพิ่งพูดถึงมีชื่อจริง
‫เรียกว่าสโคป
‫หมายความว่าตัวแปรมีชีวิตอยู่นานแค่ไหน?
‫และฉันได้อธิบายตัวแปรอินสแตนซ์ที่เป็นตัวแปรที่ใช้งานได้ยาวนานเท่ากับอินสแตนซ์เฉพาะของคลาส
‫ตอนนี้มีตัวแปรประเภทอื่นด้วย
‫มีตัวแปรอยู่นานเท่ากับฟังก์ชัน
‫โดยทั่วไปเมื่อคุณเรียกใช้ฟังก์ชันเฉพาะ ฟังก์ชันนั้นจะทำงานและทันทีที่ฟังก์ชันเสร็จสิ้น
‫ตัวแปรจะหยุดทำงาน
‫ดังนั้นในภาษา C++ โดยทั่วไปแล้ว ตัวแปรจะมีผลระหว่างเครื่องหมายปีกกาในไวยากรณ์
‫ดังนั้นจึงเป็นหลักการที่ดี
‫มันไม่ได้ถูกต้องเสมอไป แต่ฟังก์ชันติ๊ก ตัวอย่างเช่น เรามีวงเล็บปีกกา
‫และถ้าเราต้องประกาศตัวแปรภายในฟังก์ชันติ๊ก มันก็จะมีอยู่เพียงครั้งเดียว
‫ฟังก์ชันติ๊กถูกเรียกและจะถูกสร้างขึ้นใหม่ในครั้งต่อไป
‫แพลตฟอร์มเคลื่อนที่
‫เราจะเห็นได้ว่าถ้าเราดูที่แท่นเคลื่อนที่
‫H คุณสามารถเห็นเวกเตอร์ของฉันถูกประกาศในวงเล็บปีกกาบางอันที่เป็นของคำจำกัดความของคลาส
‫ซึ่งเป็นสาเหตุที่ตัวแปรเหล่านี้มีอยู่ตราบเท่าที่อินสแตนซ์ของคลาสมี
‫ดังนั้นฉันอยากจะพิสูจน์เรื่องนี้กับคุณ
‫ไปที่ DHCP ของแพลตฟอร์มที่กำลังเคลื่อนที่แล้วสร้างตัวแปรท้องถิ่นภายในสิ่งนี้
‫ฉันจะสร้างมันด้วยวิธีเดียวกับที่เราทำ
‫เมื่อเราประกาศข้อผิดพลาดในไฟล์ส่วนหัว เราจะมีเวกเตอร์ F แล้วตามด้วยชื่อของเวกเตอร์ ฉันจะเรียกมันว่าเวกเตอร์โลคัล
‫จากนั้นเราสามารถตั้งค่านี้ได้ทันทีเมื่อเราสร้างมันขึ้นมา
‫เราสามารถทำได้โดยใช้คอนสตรัคเตอร์สำหรับเวกเตอร์ F หรือเราสามารถทำได้จากตัวแปรอื่น เหมือนกับที่เราสามารถส่งตัวแปรไปยังฟังก์ชันได้
‫ดังนั้นก่อนอื่นเราสามารถใช้วิธี Constructor ได้
‫เราจะมีเวกเตอร์ F และผมให้มันเป็น 1 ถึง 3 แล้วก็อัฒภาคที่ท้ายบรรทัด
‫ดังนั้นตอนนี้จึงเป็นตัวแปรท้องถิ่น
‫มีอยู่ในฟังก์ชันนี้เท่านั้นและจะรีเซ็ตทุกครั้งที่เรียกใช้ฟังก์ชัน
‫ถ้าผมต้องทำอะไรแบบนี้, ถ้าผมทำอะไรเหมือนในบรรทัดที่ 29 โดยเวกเตอร์ของผมถูกอัพเดต,
‫เราสามารถมีเวกเตอร์โลคัล, เราสามารถมีเวกเตอร์โลคัล z เท่ากับเวกเตอร์โลคัลดอท z บวก
‫หนึ่ง.
‫และถ้าฉันต้องตั้งค่าตำแหน่งของฉันเป็นเวกเตอร์ในเครื่องนั้น มันจะเหมือนกันทุก ๆ เฟรม เพราะเรารีเซ็ตและเริ่มต้นจากตำแหน่งเดียวกัน
‫หนึ่ง สอง สาม ทุกฟังก์ชันติ๊กเดียว
‫ดังนั้นฟังก์ชันนี้มีอยู่ในเครื่องเท่านั้น
‫ผมอยากให้คุณลองทำการทดลองเล็กๆ น้อยๆ เป็นความท้าทายของคุณในการกำหนดเวกเตอร์โลคัลจากเวกเตอร์ของผม
‫โดยพื้นฐานแล้ว คุณจะทำแทนที่จะตั้งค่าจากคอนสตรัคเตอร์ คุณจะตั้งค่าจากค่าที่อยู่ในเวกเตอร์ของฉันในปัจจุบัน
‫มันจะเอาสำเนาของเวกเตอร์นั้นไปใส่เวกเตอร์ในเครื่องของคุณ
‫ฉันต้องการให้คุณตั้งค่าเป็นตำแหน่งโดยใช้เวกเตอร์ในเครื่อง
‫และเนื่องจากเรากำลังพยายามอัปเดตเวกเตอร์ในพื้นที่นั้นทุกเฟรม เรามาดูกันว่าเอฟเฟกต์คืออะไร
‫แพลตฟอร์มเคลื่อนที่หรือไม่?
‫คุณคาดหวังที่จะลองใช้งานหรือไม่ รวบรวมการเล่นโค้ดและดูว่าได้เกิดขึ้นจริงหรือไม่
‫หยุดวิดีโอชั่วคราวและไปกันเลย
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫ดังนั้นผมจะแทนที่จะใช้คอนสตรัคเตอร์ตรงนี้เพื่อตั้งค่าเวกเตอร์โลคัล ผมจะตั้งค่าเวกเตอร์แทน
‫เรากำลังเอาค่าที่เก็บไว้ในเวกเตอร์ของฉันและใส่ลงในเวกเตอร์ในเครื่องแล้วเรากำลังอัปเดตเวกเตอร์ในเครื่อง
‫เรากำลังเพิ่มคำพูดของมันทุกๆ เฟรม แล้วผมต้องการตั้งค่าตำแหน่งของนักแสดงแทนจากเวกเตอร์
‫เราจะตั้งค่าจากเวกเตอร์ในพื้นที่แทน
‫ตอนนี้จะเกิดอะไรขึ้นในกรณีนี้ คุณคิดไหม?
‫ลองไปข้างหน้าและหา
‫ฉันจะกดปุ่มคอมไพล์แล้วไปข้างหน้าและกดปุ่มเล่นและเราจะเห็นว่าแพลตฟอร์มยังคงเคลื่อนไปทางขวา
‫แต่มันจะไม่ขึ้นในทิศทาง Z
‫คุณจะเห็นได้ว่าสิ่งนี้ไม่ได้ส่งผลกระทบเลยจริงๆ การเพิ่มขึ้นของเวกเตอร์ในพื้นที่เพราะมันถูกรีเซ็ตจากค่าปัจจุบันในเวกเตอร์ของฉัน
‫ทุกเฟรม
‫อย่างไรก็ตาม เวกเตอร์ของฉันยังคงได้รับการปรับปรุง
‫ทุกเฟรม ค่า y จะเพิ่มขึ้น ทุกเฟรม
‫และนั่นเป็นสาเหตุที่เราเห็นการเคลื่อนไหวไปทางขวา
‫วิธีหนึ่งที่เราจะเห็นว่าการเปลี่ยนแปลงนี้เป็นเวกเตอร์โลคัลเป็นเพียงโลคัล คือการเพิ่มค่านี้จากหนึ่งเป็น
‫100
‫เราจึงบวก 100 เข้ากับค่าเวกเตอร์ท้องถิ่น
‫เราไปคอมไพล์แล้วกดเล่นได้เลย
‫และสิ่งที่คุณจะได้เห็นก็คือ ที่จริงแล้ว แพลตฟอร์มนั้นสูงขึ้นไปในอากาศ 100 ยูนิต
‫ลองใช้เวลาสักครู่ที่นี่และดีดออกด้วย F 8 และหยุดเกมด้วยปุ่มหยุดชั่วคราวในแถบเครื่องมือหลัก จากนั้นเลือกแพลตฟอร์มที่กำลังเคลื่อนที่ของเราเพื่อดูในบานหน้าต่างรายละเอียด
‫ในการทำเช่นนั้น ฉันต้องคลิกที่มันในวิวพอร์ตด้วยเหตุผลบางประการ
‫บางครั้งก็ใช้งานไม่ได้ เพียงแค่คลิกที่มันในโครงร่าง
‫และผมอยากชี้ให้คุณเห็นว่าค่าในเวกเตอร์ของผม ค่า z ในเวกเตอร์ของผมน้อยกว่าตำแหน่ง
‫Z ของการแปลง 100 หน่วย
‫คุณจะเห็นได้ว่าการเพิ่มเวกเตอร์ในพื้นที่นั้นมีผลกระทบ
‫เรามีตำแหน่ง 100 หน่วย สูงกว่าตำแหน่งในเวกเตอร์ของฉัน
‫และสิ่งที่ยอดเยี่ยมมากเกี่ยวกับตัวแปรโลคัลก็คือเมื่อฟังก์ชันเสร็จสิ้นการดำเนินการเฉพาะ
‫ตัวแปรเหล่านี้จะถูกล้างและรีเซ็ต
‫ดังนั้นคุณจึงสามารถรู้ได้เสมอว่าจะคาดหวังอะไรจากตัวแปรท้องถิ่น
‫คุณทราบเสมอว่าค่าใดจะอยู่ในนั้น ซึ่งแตกต่างจากตัวแปรคลาสที่สามารถอัปเดตได้ตลอดเวลาจากฟังก์ชันอื่น
‫ดังนั้นเราจะใส่ตัวแปรท้องถิ่นเหล่านี้ผ่านขั้นตอนในการบรรยายไม่กี่ครั้ง
‫มาดำน้ำกัน