‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะเรียนรู้เกี่ยวกับวิธีที่เราสามารถดึงเอาท์พุตออกจากฟังก์ชันใน C++
‫และเราจะใช้สิ่งนี้เพื่อลดความซับซ้อนของโค้ดของเราอย่างมาก และเริ่มใช้งาน pseudocode บางส่วนที่เราได้เขียนไว้
‫มาดำดิ่งกัน
‫ดังนั้น ก่อนที่เราจะพยายามทำความเข้าใจค่าที่ส่งคืนจากฟังก์ชัน เรามาทำอ้อมสั้น ๆ และทำความเข้าใจมันเสียก่อน
‫สองแนวคิดที่นี่เพิ่มแนวคิดอีกสองแนวคิดในอภิธานศัพท์ของเรา
‫อันแรกคือนิพจน์และนิพจน์เป็นส่วนของโค้ดที่สร้างค่า
‫และมีคำสั่งที่เป็นส่วนของโค้ดที่เป็นการกระทำที่ต้องทำ
‫ตอนนี้ทั้งสองมีความสัมพันธ์กันโดยแท้จริงแล้วนิพจน์มักจะเป็นคำสั่งในการคำนวณค่าของส่วนย่อยของโค้ด
‫คุณต้องมีการดำเนินการก่อน
‫แต่สิ่งเดียวกันนี้ไม่จำเป็นต้องเป็นจริงเสมอไป
‫คำสั่งไม่ได้ให้คุณค่ากับคุณเสมอไป
‫ลองมาดูตัวอย่างนิพจน์และบางสิ่งที่ไม่ได้มาจากโค้ดที่เราเขียนไปแล้วกัน
‫เมื่อเราพิมพ์ vector ของฉันลงใน C++ นี่คือนิพจน์เพราะมันมีค่าของสิ่งที่เก็บไว้ในตัวแปรเวกเตอร์ของฉัน
‫เช่นเดียวกับเวกเตอร์ท้องถิ่น
‫และที่จริงแล้วถ้าคุณมีเวกเตอร์โลคัลบวก z, ตัวมันเองคือนิพจน์และเวกเตอร์โลคัลดอท
‫z บวก 100
‫ตัวมันเองก็เป็นนิพจน์เช่นกัน เพราะเวกเตอร์โลคัล z ให้ค่าภายในสมาชิก Z แก่คุณ
‫และเมื่อคุณบวก 100 ก็จะได้ค่าใหม่ที่บวก 100
‫นี่จึงเป็นนิพจน์ทั้งหมด
‫อย่างไรก็ตาม สิ่งที่ไม่ใช่นิพจน์คือเมื่อเราประกาศเวกเตอร์โลคัล และเราบอกว่าเวกเตอร์ F, เวกเตอร์โลคัลเท่ากับเวกเตอร์ของฉัน
‫และใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัด
‫เราไม่สามารถใช้สิ่งนั้นเพื่อรับค่าได้
‫ที่นั่นไม่มีค่า
‫เป็นเพียงการบอก C++ ว่านี่คือการดำเนินการสำหรับคุณ
‫ฉันต้องการให้คุณสร้างเวกเตอร์ท้องถิ่นใหม่
‫นั่นจึงไม่ใช่การแสดงออก
‫อย่างไรก็ตาม สิ่งที่เป็นการแสดงออกถึงตำแหน่งนักแสดง
‫เป็นฟังก์ชันที่เรากำลังเรียกใช้เพราะมีวงเล็บอยู่ท้ายนี้
‫ที่จริงเราไม่มีข้อโต้แย้งใด ๆ ที่นี่
‫นี่เป็นรายการอาร์กิวเมนต์ที่ว่างเปล่า แต่กำลังเรียกอะไรบางอย่าง
‫และเนื่องจากฟังก์ชันนี้มีค่าส่งคืน โค้ดจริงในที่นี้คือนิพจน์ที่ใช้ค่าของสิ่งที่ส่งคืนจากฟังก์ชัน
‫และโดยพื้นฐานแล้วจะเหมือนกับพินเอาต์พุตที่เราเคยเห็นใน Blueprint ก่อนหน้านี้
‫ยกเว้นว่าไม่เหมือนกับ Blueprint คุณสามารถมีค่าเอาต์พุตได้เพียงค่าเดียวจากฟังก์ชัน
‫มีค่าส่งคืนเพียงค่าเดียว
‫นั่นคือสิ่งที่เราสามารถใช้ตรงนี้ได้ โดยที่เราได้เขียนโค้ดเทียมที่ระบุว่า Get current location
‫นั่นคือที่ที่เราจะทำอย่างนั้น
‫เรากำลังจะได้รับตำแหน่งโดยใช้ตำแหน่งที่ได้รับของเรา
‫มาสร้างตัวแปรโลคัลใหม่กันที่นี่
‫เราจะมีตัวแปรโลคัลใหม่ชื่อ F ของเวกเตอร์ประเภท F
‫จะต้องเป็นเวกเตอร์ประเภท F เพราะนั่นคือประเภทที่ส่งคืนจากตำแหน่งที่แอ็คทีฟ
‫และเราจะเรียกตำแหน่งปัจจุบันนี้ และเราจะตั้งค่าให้เท่ากับผลลัพธ์ หรือนิพจน์ รับตำแหน่งนักแสดง
‫แล้วใส่วงเล็บชุดของวงเล็บที่ตรงกัน แล้วตามด้วยเครื่องหมายอัฒภาคเพื่อสิ้นสุดบรรทัด
‫ดังนั้นถ้าเราแยกบรรทัดนี้หน่อย เราจะเห็นว่าส่วนนี้ตรงนี้ รับตำแหน่งนักแสดง
‫และวงเล็บคือนิพจน์ ได้ค่ามา ซึ่งก็คือตำแหน่งปัจจุบันของนักแสดง
‫จากนั้น เรากำลังดำเนินการมอบหมายไปยังตำแหน่งปัจจุบัน ซึ่งกำลังประกาศอยู่ที่นี่ด้วย
‫ดังนั้นในบรรทัดนี้ ทั้งบรรทัดนี้จึงไม่ใช่นิพจน์
‫ไม่มีค่าอะไรจากมัน มันเป็นคำสั่ง
‫และโดยปกติคุณสามารถบอกคำสั่งได้เพราะใน C++ จะลงท้ายด้วยอัฒภาค
‫โอเค นี่โดยพื้นฐานแล้วจะทำให้เราเลิกใช้เวกเตอร์และเวกเตอร์ในท้องที่ที่เราใช้ก่อนหน้านี้ได้
‫เพราะเราควรจะสามารถอัปเดตตัวแปรท้องถิ่นของเราที่นี่ ตำแหน่งปัจจุบันที่เราได้รับจาก
‫ตำแหน่งของนักแสดงของเรา
‫สิ่งที่เราจะทำต่อไปคือข้างล่างนี้ เรามีความคิดเห็นว่า ตั้งค่าตำแหน่ง
‫ดังนั้นหลังจากบรรทัดความคิดเห็นนั้น ฉันจะทำ set Actor location โดยใช้นิพจน์ตำแหน่งปัจจุบัน ซึ่งก็แค่ใช้ค่าตัวแปรนั้นแล้วใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดเพื่อบอกว่าทั้งหมดนี้เป็นคำสั่ง
‫เราต้องการให้มันดำเนินการตามที่ตั้งไว้และสังเกตว่าฉันในขณะที่ความคิดเห็นของฉันถูกเยื้อง ฉันได้ตัดสินใจที่จะไม่เยื้องรหัสเพื่อให้ตรงกันเพราะโดยปกติเราต้องการ
‫รหัสให้อยู่ในระดับหนึ่งของการเยื้องภายในฟังก์ชัน
‫ตอนนี้สิ่งที่ฉันทำได้คือ ฉันสามารถลบโค้ดทั้งหมดที่เรามีก่อนหน้านี้ ทุกอย่างเกี่ยวกับเวกเตอร์ในเครื่อง
‫เวกเตอร์ของฉันตั้งค่าตำแหน่งโดยใช้เวกเตอร์ในพื้นที่
‫ฉันสามารถลบทั้งหมดนั้นเพื่อให้ทั้งหมดที่เรามีตอนนี้คือเนื้อหารอบๆ ความคิดเห็นของเรา
‫และฉันจะเข้าไปที่ไฟล์ส่วนหัวและทำความสะอาดที่นี่ด้วย
‫เราไม่ต้องการเวกเตอร์ของฉันอีกต่อไป เราไม่ต้องการคุณสมบัติใหม่ x ของฉันอีกต่อไป
‫ดังนั้นฉันจะลบสิ่งเหล่านี้ด้วย
‫เห็นได้ชัดว่า CP ของแพลตฟอร์มที่กำลังเคลื่อนที่ไม่ได้ทำอะไรมากนักเพราะเราได้รับตำแหน่งที่ใช้งานอยู่ในปัจจุบัน
‫จากนั้นเราตั้งค่าใหม่อีกครั้ง ซึ่งโดยพื้นฐานแล้วไม่มีผลกระทบ
‫ฉันอยากให้คุณลองอัปเดตตำแหน่งปัจจุบันของแพลตฟอร์มที่กำลังเคลื่อนที่ในฟังก์ชันติ๊กนั้น
‫ดังนั้นใช้สมาชิก X หรือ Y ตามที่เห็นสมควร
‫X หนึ่งตัวจะย้ายคุณไปข้างหน้า Y จะย้ายคุณไปทางขวา จากนั้นคุณสามารถเพิ่มและกำหนดกลับเข้าสู่สมาชิกตามที่เราทำก่อนหน้านี้เพื่ออัปเดตตำแหน่งแพลตฟอร์มที่กำลังเคลื่อนที่ของเรา
‫ดังนั้นให้เพิ่มหนึ่งหรือสองโดยขึ้นอยู่กับความเร็วที่คุณต้องการให้แพลตฟอร์มเคลื่อนที่ จากนั้นจึงย้ายแพลตฟอร์มไปยังตำแหน่งเริ่มต้น
‫เพราะตอนนี้เราไม่มีตัวแปรสมาชิกนั้นเพื่อบอกตำแหน่งเริ่มต้น ที่จริงแล้วเราใช้ตำแหน่งปัจจุบัน
‫ดังนั้นไม่ว่าคุณจะวางแพลตฟอร์มนั้นไว้ที่ใด นั่นเป็นจุดเริ่มต้นของแพลตฟอร์ม
‫จากนั้นฉันอยากให้คุณคอมไพล์และทดสอบโค้ดของคุณ และดูว่าโค้ดมีการเคลื่อนไหวหรือไม่ อย่างที่คุณคาดไว้
‫หยุดวิดีโอชั่วคราวและไปกันเลย
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫ดังนั้นเราจะวางโค้ดบรรทัดนี้ไว้ใต้ความคิดเห็นที่พูดถึงมัน แล้วเพิ่มเวกเตอร์ไปที่ตำแหน่งนั้น
‫และเหตุผลที่เราใส่มันที่นี่ก็เพราะคำสั่ง
‫เราต้องการรับตำแหน่งปัจจุบัน อัปเดตแล้วตั้งค่า
‫เราไม่ต้องการให้อะไรผิดปกติเกิดขึ้นที่นั่น
‫หากเราต้องอัปเดตก่อนที่เราจะสร้างตัวแปร ตัวแปรนั้นจะไม่มีอยู่จริง
‫จำไว้ว่ามันเป็นตัวแปรท้องถิ่น
‫จะมีอยู่ก็ต่อเมื่อเราสร้างมันขึ้นมาในการเรียกใช้ฟังก์ชันนี้โดยเฉพาะ
‫และถ้าเราทำหลังจากกำหนดตำแหน่งนักแสดงอีกครั้ง การปรับเปลี่ยนนั้นก็จะหลุดออกไปเมื่อเราไปถึงวงเล็บปีกกาในฟังก์ชัน
‫เราจะกำหนดตำแหน่งปัจจุบัน ดอท x ฉันจะใช้เท่ากับตำแหน่งปัจจุบัน ดอท x บวกหนึ่ง
‫แล้วใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัด
‫และเราจะกลับไปที่ Unreal และเราจะกดปุ่มคอมไพล์
‫และอย่างที่ฉันบอกไป ตอนนี้เราต้องย้ายแท่นเคลื่อนที่นี้ไปยังตำแหน่งเริ่มต้น
‫ดังนั้นฉันจะคลิกที่ตัวละครบุคคลที่สามของเรา และฉันจะคัดลอกตำแหน่งของเขาโดยคลิกขวาที่ตำแหน่งนั้น แล้วกดคัดลอก
‫จากนั้นไปที่แพลตฟอร์มที่กำลังเคลื่อนที่ของเรา คลิกขวาที่ตำแหน่งนั้น แล้วกดวาง
‫นั่นทำให้แพลตฟอร์มอยู่ในเครื่องเล่นของเรา ซึ่งไม่ใช่สิ่งที่เราต้องการจริงๆ
‫ผมจะเลื่อนมันออกไปทางขวาของตัวเล่นเล็กน้อย และดูว่ามันอยู่ในความสูงที่เหมาะสมหรือไม่
‫ฉันคิดว่าฉันจะทำให้มันต่ำลงเล็กน้อย ซึ่งเป็นหนึ่งในข้อดีของการใช้ตำแหน่งปัจจุบันมากกว่าตัวแปรตำแหน่ง
‫คือการที่ฉันสามารถเห็นได้ว่าแพลตฟอร์มนี้จะเป็นอย่างไรในโลก
‫ดังนั้นตอนนี้ ถ้าฉันไปข้างหน้าและตีเล่น คุณจะเห็นว่าแพลตฟอร์มเคลื่อนที่ไปในทิศทาง X อย่างสวยงาม และฉันก็ยังสามารถกระโดดขึ้นไปบนนั้นและเคลื่อนที่ไปพร้อมกับมันได้
‫สิ่งที่ดี
‫ตอนนี้เราได้เรียนรู้ว่าค่าที่ส่งกลับทำงานอย่างไรจากฟังก์ชันต่างๆ
‫เราเริ่มเข้าใจแนวคิดมากมายจากพิมพ์เขียวในโลก C++
‫เจอกันใหม่ตอนหน้าค่ะ