‫สวัสดีและยินดีต้อนรับ.
‫ในการบรรยายนี้ เราจะเรียนรู้ว่าเราจะหาตัวชี้ไปยังตัวแสดงที่เป็นเจ้าของส่วนประกอบได้อย่างไร
‫เราจะค้นหาว่าพอยน์เตอร์คืออะไร ที่อยู่อะไรอยู่ในหน่วยความจำ และเราจะพิมพ์มันออกมาในข้อความบันทึกของเราด้วย
‫มาดำดิ่งกัน
‫ลองใช้เวลาสักครู่เพื่อทำความเข้าใจแนวคิดหลักของสิ่งที่เกิดขึ้นในการเขียนโปรแกรมโดยทั่วไปเกี่ยวกับที่อยู่ของตัวแปร
‫ที่อยู่ของตัวแปรคืออะไร?
‫เราเก็บตัวแปรทั้งหมดของเราไว้ในหน่วยความจำในชิป ram นี้ในคอมพิวเตอร์ของคุณและตัวแปรต้องการหน่วยความจำในการจัดเก็บข้อมูล
‫ดังนั้นเลขทศนิยมต้องใช้ข้อมูล 32 บิตหรือ 64 บิต หากเป็นจำนวนเต็มคู่ ต้องใช้หน่วยความจำจำนวนหนึ่ง
‫นอกจากนี้ ยิ่งโครงสร้างที่คุณมีหรือคลาสที่คุณมีมากขึ้น เช่น นักแสดงอาจมีขนาดใหญ่มากและครอบคลุมข้อมูลจำนวนมาก
‫อาจต้องใช้หน่วยความจำหลายกิโลไบต์ต่อนักแสดง สิ่งต่างๆ เช่นนั้น
‫หน่วยความจำนั้นต้องอยู่ที่ไหนสักแห่งบนฟิลด์ข้อมูลว่างขนาดใหญ่ซึ่งเป็นคลังหน่วยความจำของคุณ
‫และตำแหน่งนั้นเรียกว่าที่อยู่
‫แล้วมันทำงานอย่างไรในทางปฏิบัติ?
‫ลองนึกภาพว่าเรามีฟิลด์ศูนย์และฟิลด์ขนาดใหญ่นี้
‫นั่นคือข้อมูลในแรมของคุณ
‫ทีนี้ ตัวแปรและตัวแปรตัวแสดงที่เรียกว่า นักแสดงของฉัน จำเป็นต้องมีตำแหน่งที่แน่นอนภายในหน่วยความจำนั้นที่จัดสรรเพื่อเก็บข้อมูลในตัวแสดง
‫ดังนั้น ส่วนสีแดงของหน่วยความจำอาจเป็นที่ที่เราจัดเก็บข้อมูลสำหรับนักแสดงคนนี้โดยเฉพาะ
‫และมีที่อยู่ซึ่งมักจะแสดงเป็นเลขฐานสองหรือเลขฐานสิบหกซึ่งโดยพื้นฐานแล้วเป็นเพียงตำแหน่ง
‫หากคุณเริ่มนับไบต์ทั้งหมด ไบต์และศูนย์ทั้งหมดตามนี้ ที่จริงแล้ว เราจะไม่นับแต่ละไบต์และศูนย์
‫เรานับในขั้นตอนที่แปด แต่นั่นไม่สำคัญเกินไป
‫เรานับจำนวนไบต์
‫นั่นคือที่อยู่ที่เราเริ่มต้น
‫พูดถึงนักแสดงของเราแล้วแต่ละประเภทก็มีขนาดที่แน่นอน
‫ดังนั้นเราจึงรู้ว่านักแสดงต้องการข้อมูลจำนวนมาก
‫และนั่นบอกเราว่าจะหาข้อมูลเกี่ยวกับนักแสดงของเราได้ที่ไหน
‫เหตุใดจึงสำคัญ
‫มาดูสถานการณ์ที่เราอาจจะอยากพูดถึงนักแสดงกันดีกว่า
‫เราต้องการมีสองตัวแปรที่อ้างอิงข้อมูลเดียวกัน
‫ในกรณีไร้เดียงสา เราก็แค่คัดลอกสิ่งนี้
‫ดังนั้นเราจึงมีหน่วยความจำบางส่วนที่จัดสรรให้กับตัวแปรนักแสดงของฉัน
‫เรามีหน่วยความจำอีกก้อนที่จัดสรรให้กับตัวแปรว่างที่เรียกว่า Your Actor ซึ่งเรายังไม่ได้กำหนดอะไรให้
‫แล้วสิ่งที่เราอยากทำเพราะต้องการให้มีข้อมูลเดียวกัน คือเรากำหนดข้อมูลหนึ่งให้กับอีกข้อมูลหนึ่ง
‫และนั่นก็ส่งผลให้เราทำสำเนาข้อมูลทั้งหมดที่อยู่ในนักแสดงของฉัน และใส่ลงในส่วนทั้งหมดที่ประกอบขึ้นเป็นนักแสดงของคุณ
‫ดังนั้น นี่จึงเป็นขั้นตอนที่ค่อนข้างแพง เนื่องจาก CPU ของคุณต้องผ่านการประเมินและประเมินหน่วยความจำแต่ละส่วนในต้นฉบับและใส่ลงในตำแหน่งใหม่
‫ซึ่งต้องใช้เวลา
‫ตอนนี้มีวิธีแก้ไขโดยใช้สิ่งที่เรียกว่าพอยน์เตอร์
‫ดังนั้นที่นี่ แทนที่จะเก็บข้อมูลนักแสดงของฉันทั้งหมด เรามีตัวแปรที่เรียกว่า นักแสดงของฉัน
‫หรือ นักแสดง ตัวชี้นักแสดงที่ไม่ได้เก็บนักแสดงทั้งหมด
‫มันแค่เก็บที่อยู่ที่คุณสามารถหาการกระทำได้
‫ดังนั้นคุณจึงเห็นได้ว่าจริง ๆ แล้วใช้หน่วยความจำน้อยลงมากในการจัดเก็บที่อยู่
‫แล้วสิ่งที่เราทำคือใส่นักแสดงของคุณ เราเก็บที่อยู่ของนักแสดงของฉัน ดังนั้นมันจึงชี้ไปที่นักแสดงดั้งเดิมแทนที่จะคัดลอกข้อมูล
‫ดังนั้นตัวชี้ชื่อ
‫นี่ไม่ใช่ไวยากรณ์จริงใน C ++
‫ใน C ++ ไวยากรณ์จะกระชับมากขึ้น
‫เราว่าอะไรบางอย่างเป็นตัวชี้โดยใส่ดาวหลังประเภท
‫ดังนั้นดารานักแสดงหมายความว่านี่คือตัวชี้นักแสดงและเพื่อให้ได้ที่อยู่ของตัวแปรเราใช้เครื่องหมายและเราจะไม่ใช้ที่อยู่นี้มากนักเพราะมีฟังก์ชั่นมากมายที่ไม่จริง
‫ตัวชี้กลับ
‫ดังนั้น เราแค่ต้องรู้วิธีใช้พอยน์เตอร์เหล่านั้น แทนที่จะสร้างมันขึ้นมาในตอนนี้
‫ดังนั้นฟังก์ชันหนึ่งที่ช่วยให้เราเข้าถึงวัตถุอื่นๆ ในฉากของเราได้คือรับเจ้าของ
‫เหตุใดสิ่งนี้จึงมีผลเมื่อเรามีองค์ประกอบ มันเป็นของนักแสดง
‫ดังนั้น หากเราต้องการให้องค์ประกอบนี้พูดคุยกับนักแสดงของเรา เพื่อให้ได้ตำแหน่ง กำหนดตำแหน่งของมัน และทำสิ่งต่างๆ
‫เช่นนั้น เราต้องสามารถหาตัวชี้ไปยังนักแสดงคนนั้นได้
‫เราไม่ต้องการคัดลอกมัน
‫อันที่จริง เราไม่อยากทำสำเนาเพราะเราต้องการเปลี่ยนนักแสดง
‫ถ้าเราทำการเปลี่ยนแปลงกับสำเนา มันจะไม่ปรากฏในฉากจริงๆ
‫ดังนั้นเราต้องสามารถเก็บตัวแปรที่เป็นตัวชี้ไปยังตัวแสดงได้
‫วิธีที่เราทำสิ่งนี้ ดังที่เราได้เห็นในสไลด์ คือการมีนักแสดงประเภท A
‫แต่เราใส่ดาวไว้ที่ส่วนท้ายซึ่งบอกเราว่านี่ไม่ใช่นักแสดงที่ถูกเก็บไว้ที่นี่ นี่เป็นเพียงที่อยู่ของนักแสดงที่ถูกเก็บไว้
‫เราก็เลยเอาตัวนักแสดงมาและเราจะเรียกเจ้าของรายนี้ จากนั้นเราจะตั้งค่าให้เท่ากับผลลัพธ์ของการเรียกหาเจ้าของ
‫ดังนั้น get owner จึงเป็นหน้าที่ขององค์ประกอบนักแสดงซึ่งช่วยให้คุณได้รับพอยน์เตอร์ของเจ้าของ
‫รับตัวชี้นักแสดงที่ชี้ไปที่เจ้าของ ใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดนั้น
‫และสิ่งที่เรามีคือตัวแปรที่เก็บที่อยู่ของนักแสดงที่เป็นเจ้าขององค์ประกอบเฉพาะนี้
‫ผมอยากท้าให้คุณทำอะไรบางอย่างโดยการพิมพ์ที่อยู่ของตัวแปรนี้
‫ดังนั้นให้ใช้ตัวแปรนักแสดงและใช้เปอร์เซ็นต์ที่คุณจัดรูปแบบ ระบุในบันทึก
‫เปอร์เซ็นต์ของคุณก็หมายความว่าคุณกำลังใช้จำนวนเต็มที่ไม่ได้ลงนาม
‫นั่นหมายถึงจำนวนเต็มที่ไม่สามารถเป็นค่าลบได้ ซึ่งก็สมเหตุสมผลเพราะที่อยู่ไม่สามารถเป็นค่าลบได้
‫เมื่อเราพูดถึงตำแหน่งที่จะค้นหาหน่วยความจำ แล้วหาว่ามันพิมพ์อะไร ไปเล่น ดูข้อความบันทึก ดู
‫สิ่งที่พิมพ์ออกมา
‫มันเปลี่ยนระหว่างการเล่นที่แตกต่างกันหรือไม่ถ้าคุณหยุดเล่นและเริ่มเล่นอีกครั้ง?
‫แล้วถ้าผู้เสนอญัตติอยู่ในนักแสดงหลายคนล่ะ?
‫มีหลายที่อยู่ที่แตกต่างกันพิมพ์ออกมาในคอนโซลหรือไม่?
‫หยุดวิดีโอชั่วคราวและมีการสอบสวนเล็กน้อย
‫ตกลง.
‫ยินดีต้อนรับกลับ.
‫เราจะไปที่บันทึกของเทศกาลคริสต์มาสนี้ และเราจะบอกว่าเจ้าของผู้เสนอญัตติ ที่อยู่ เปอร์เซ็นต์ทวิภาค
‫คุณ
‫นั่นคือสิ่งที่มันจะใส่ค่าพอยน์เตอร์
‫แล้วเราจะใส่ตัวชี้จริง
‫เราจะมีเจ้าของที่นี่
‫จึงจะพิมพ์ที่อยู่ของเจ้าของ
‫ไปที่ที่ไม่จริงกันเถอะ
‫กดปุ่มควบคุม alt f 11
‫และเมื่อทำการคอมไพล์เสร็จแล้ว มาเล่นกัน
‫และสิ่งที่เราเห็นก็คือที่อยู่ของเจ้าของข้อความบันทึกกำลังส่งเข้ามา และทำให้เรามีจำนวนที่มากสำหรับที่อยู่นี้จริงๆ
‫จะเกิดอะไรขึ้นหากฉันหยุดเล่นและเล่นอีกครั้งเพียงครู่เดียว
‫คุณสามารถเห็นที่อยู่ค่อนข้างแตกต่างอย่างมาก และนั่นเป็นเพราะทุกครั้งที่เราตีเล่น
‫Unreal กำลังสร้างนักแสดงชุดใหม่ทั้งหมดในฉาก โดยพื้นฐานแล้วพร้อมที่จะเล่นโดยเริ่มจากศูนย์
‫นั่นเป็นเหตุผลที่เราเห็นตำแหน่งที่อยู่ใหม่ทุกครั้งที่เราเล่น
‫จะเกิดอะไรขึ้นถ้าฉันไปที่เสาหลักนี้ และเพิ่มองค์ประกอบผู้เสนอญัตติเข้ากับเสาด้วย และเรากดปุ่มเล่นและเลื่อนลงไปที่ด้านล่างของบันทึกของฉัน
‫คุณจะเห็นว่ามีการทำเครื่องหมายที่อยู่สองแห่งที่พิมพ์ออกมาที่นี่ เนื่องจากมีตัวแสดงที่แตกต่างกันสองคนซึ่งถูกจัดเก็บไว้ในหน่วยความจำสองตำแหน่งที่แตกต่างกัน
‫ดังนั้นนี่คือที่อยู่สองแห่ง และคุณจะเห็นได้ว่าจริงๆ แล้วมีความแตกต่างกันค่อนข้างน้อยระหว่างที่อยู่ทั้งสองนี้
‫ซึ่งจะบอกคุณว่า Unreal เก็บข้อมูลไว้เท่าใดในหน่วยความจำ และเหตุใดจึงสำคัญที่จะไม่สร้างประสิทธิภาพให้มีประสิทธิภาพ
‫สำเนามากเกินไป
‫สำหรับการบรรยายครั้งนี้
‫แล้วพบกันใหม่ตอนหน้า เราจะทำเรื่องสนุกๆ มากขึ้นพร้อมคำแนะนำ