﻿1
00:00:04,290 --> 00:00:05,490
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,490 --> 00:00:12,810
‫ในการบรรยายนี้ เราจะเรียนรู้ว่าเราจะหาตัวชี้ไปยังตัวแสดงที่เป็นเจ้าของส่วนประกอบได้อย่างไร

3
00:00:12,810 --> 00:00:19,740
‫เราจะค้นหาว่าพอยน์เตอร์คืออะไร ที่อยู่อะไรอยู่ในหน่วยความจำ และเราจะพิมพ์มันออกมาในข้อความบันทึกของเราด้วย

4
00:00:19,740 --> 00:00:20,640
‫มาดำดิ่งกัน

5
00:00:21,090 --> 00:00:29,130
‫ลองใช้เวลาสักครู่เพื่อทำความเข้าใจแนวคิดหลักของสิ่งที่เกิดขึ้นในการเขียนโปรแกรมโดยทั่วไปเกี่ยวกับที่อยู่ของตัวแปร

6
00:00:29,130 --> 00:00:30,810
‫ที่อยู่ของตัวแปรคืออะไร?

7
00:00:30,810 --> 00:00:43,920
‫เราเก็บตัวแปรทั้งหมดของเราไว้ในหน่วยความจำในชิป ram นี้ในคอมพิวเตอร์ของคุณและตัวแปรต้องการหน่วยความจำในการจัดเก็บข้อมูล

8
00:00:43,920 --> 00:00:52,740
‫ดังนั้นเลขทศนิยมต้องใช้ข้อมูล 32 บิตหรือ 64 บิต หากเป็นจำนวนเต็มคู่ ต้องใช้หน่วยความจำจำนวนหนึ่ง

9
00:00:52,740 --> 00:00:58,440
‫นอกจากนี้ ยิ่งโครงสร้างที่คุณมีหรือคลาสที่คุณมีมากขึ้น เช่น นักแสดงอาจมีขนาดใหญ่มากและครอบคลุมข้อมูลจำนวนมาก

10
00:00:58,440 --> 00:01:04,230
‫อาจต้องใช้หน่วยความจำหลายกิโลไบต์ต่อนักแสดง สิ่งต่างๆ เช่นนั้น

11
00:01:04,590 --> 00:01:12,510
‫หน่วยความจำนั้นต้องอยู่ที่ไหนสักแห่งบนฟิลด์ข้อมูลว่างขนาดใหญ่ซึ่งเป็นคลังหน่วยความจำของคุณ

12
00:01:12,660 --> 00:01:16,410
‫และตำแหน่งนั้นเรียกว่าที่อยู่

13
00:01:16,410 --> 00:01:18,420
‫แล้วมันทำงานอย่างไรในทางปฏิบัติ?

14
00:01:18,420 --> 00:01:21,870
‫ลองนึกภาพว่าเรามีฟิลด์ศูนย์และฟิลด์ขนาดใหญ่นี้

15
00:01:21,870 --> 00:01:25,140
‫นั่นคือข้อมูลในแรมของคุณ

16
00:01:25,320 --> 00:01:37,110
‫ทีนี้ ตัวแปรและตัวแปรตัวแสดงที่เรียกว่า นักแสดงของฉัน จำเป็นต้องมีตำแหน่งที่แน่นอนภายในหน่วยความจำนั้นที่จัดสรรเพื่อเก็บข้อมูลในตัวแสดง

17
00:01:37,110 --> 00:01:42,300
‫ดังนั้น ส่วนสีแดงของหน่วยความจำอาจเป็นที่ที่เราจัดเก็บข้อมูลสำหรับนักแสดงคนนี้โดยเฉพาะ

18
00:01:42,300 --> 00:01:50,610
‫และมีที่อยู่ซึ่งมักจะแสดงเป็นเลขฐานสองหรือเลขฐานสิบหกซึ่งโดยพื้นฐานแล้วเป็นเพียงตำแหน่ง

19
00:01:50,610 --> 00:01:59,220
‫หากคุณเริ่มนับไบต์ทั้งหมด ไบต์และศูนย์ทั้งหมดตามนี้ ที่จริงแล้ว เราจะไม่นับแต่ละไบต์และศูนย์

20
00:01:59,220 --> 00:02:03,360
‫เรานับในขั้นตอนที่แปด แต่นั่นไม่สำคัญเกินไป

21
00:02:03,360 --> 00:02:04,410
‫เรานับจำนวนไบต์

22
00:02:04,620 --> 00:02:08,070
‫นั่นคือที่อยู่ที่เราเริ่มต้น

23
00:02:08,810 --> 00:02:14,180
‫พูดถึงนักแสดงของเราแล้วแต่ละประเภทก็มีขนาดที่แน่นอน

24
00:02:14,180 --> 00:02:18,020
‫ดังนั้นเราจึงรู้ว่านักแสดงต้องการข้อมูลจำนวนมาก

25
00:02:18,020 --> 00:02:23,240
‫และนั่นบอกเราว่าจะหาข้อมูลเกี่ยวกับนักแสดงของเราได้ที่ไหน

26
00:02:23,360 --> 00:02:24,880
‫เหตุใดจึงสำคัญ

27
00:02:24,890 --> 00:02:30,680
‫มาดูสถานการณ์ที่เราอาจจะอยากพูดถึงนักแสดงกันดีกว่า

28
00:02:30,680 --> 00:02:34,340
‫เราต้องการมีสองตัวแปรที่อ้างอิงข้อมูลเดียวกัน

29
00:02:34,520 --> 00:02:38,240
‫ในกรณีไร้เดียงสา เราก็แค่คัดลอกสิ่งนี้

30
00:02:38,240 --> 00:02:44,360
‫ดังนั้นเราจึงมีหน่วยความจำบางส่วนที่จัดสรรให้กับตัวแปรนักแสดงของฉัน

31
00:02:44,510 --> 00:02:52,280
‫เรามีหน่วยความจำอีกก้อนที่จัดสรรให้กับตัวแปรว่างที่เรียกว่า Your Actor ซึ่งเรายังไม่ได้กำหนดอะไรให้

32
00:02:52,550 --> 00:02:59,690
‫แล้วสิ่งที่เราอยากทำเพราะต้องการให้มีข้อมูลเดียวกัน คือเรากำหนดข้อมูลหนึ่งให้กับอีกข้อมูลหนึ่ง

33
00:02:59,690 --> 00:03:10,400
‫และนั่นก็ส่งผลให้เราทำสำเนาข้อมูลทั้งหมดที่อยู่ในนักแสดงของฉัน และใส่ลงในส่วนทั้งหมดที่ประกอบขึ้นเป็นนักแสดงของคุณ

34
00:03:10,730 --> 00:03:17,990
‫ดังนั้น นี่จึงเป็นขั้นตอนที่ค่อนข้างแพง เนื่องจาก CPU ของคุณต้องผ่านการประเมินและประเมินหน่วยความจำแต่ละส่วนในต้นฉบับและใส่ลงในตำแหน่งใหม่

35
00:03:17,990 --> 00:03:22,680
‫ซึ่งต้องใช้เวลา

36
00:03:22,700 --> 00:03:25,760
‫ตอนนี้มีวิธีแก้ไขโดยใช้สิ่งที่เรียกว่าพอยน์เตอร์

37
00:03:25,760 --> 00:03:33,530
‫ดังนั้นที่นี่ แทนที่จะเก็บข้อมูลนักแสดงของฉันทั้งหมด เรามีตัวแปรที่เรียกว่า นักแสดงของฉัน

38
00:03:33,530 --> 00:03:38,840
‫หรือ นักแสดง ตัวชี้นักแสดงที่ไม่ได้เก็บนักแสดงทั้งหมด

39
00:03:38,840 --> 00:03:42,170
‫มันแค่เก็บที่อยู่ที่คุณสามารถหาการกระทำได้

40
00:03:42,170 --> 00:03:46,580
‫ดังนั้นคุณจึงเห็นได้ว่าจริง ๆ แล้วใช้หน่วยความจำน้อยลงมากในการจัดเก็บที่อยู่

41
00:03:46,580 --> 00:03:54,140
‫แล้วสิ่งที่เราทำคือใส่นักแสดงของคุณ เราเก็บที่อยู่ของนักแสดงของฉัน ดังนั้นมันจึงชี้ไปที่นักแสดงดั้งเดิมแทนที่จะคัดลอกข้อมูล

42
00:03:54,140 --> 00:03:59,090
‫ดังนั้นตัวชี้ชื่อ

43
00:03:59,240 --> 00:04:01,880
‫นี่ไม่ใช่ไวยากรณ์จริงใน C ++

44
00:04:01,880 --> 00:04:04,430
‫ใน C ++ ไวยากรณ์จะกระชับมากขึ้น

45
00:04:04,640 --> 00:04:09,650
‫เราว่าอะไรบางอย่างเป็นตัวชี้โดยใส่ดาวหลังประเภท

46
00:04:09,650 --> 00:04:22,310
‫ดังนั้นดารานักแสดงหมายความว่านี่คือตัวชี้นักแสดงและเพื่อให้ได้ที่อยู่ของตัวแปรเราใช้เครื่องหมายและเราจะไม่ใช้ที่อยู่นี้มากนักเพราะมีฟังก์ชั่นมากมายที่ไม่จริง

47
00:04:22,310 --> 00:04:25,250
‫ตัวชี้กลับ

48
00:04:25,250 --> 00:04:31,160
‫ดังนั้น เราแค่ต้องรู้วิธีใช้พอยน์เตอร์เหล่านั้น แทนที่จะสร้างมันขึ้นมาในตอนนี้

49
00:04:31,640 --> 00:04:40,070
‫ดังนั้นฟังก์ชันหนึ่งที่ช่วยให้เราเข้าถึงวัตถุอื่นๆ ในฉากของเราได้คือรับเจ้าของ

50
00:04:40,070 --> 00:04:46,460
‫เหตุใดสิ่งนี้จึงมีผลเมื่อเรามีองค์ประกอบ มันเป็นของนักแสดง

51
00:04:46,460 --> 00:04:53,690
‫ดังนั้น หากเราต้องการให้องค์ประกอบนี้พูดคุยกับนักแสดงของเรา เพื่อให้ได้ตำแหน่ง กำหนดตำแหน่งของมัน และทำสิ่งต่างๆ

52
00:04:53,690 --> 00:04:58,400
‫เช่นนั้น เราต้องสามารถหาตัวชี้ไปยังนักแสดงคนนั้นได้

53
00:04:58,400 --> 00:05:00,040
‫เราไม่ต้องการคัดลอกมัน

54
00:05:00,050 --> 00:05:03,350
‫อันที่จริง เราไม่อยากทำสำเนาเพราะเราต้องการเปลี่ยนนักแสดง

55
00:05:03,350 --> 00:05:07,160
‫ถ้าเราทำการเปลี่ยนแปลงกับสำเนา มันจะไม่ปรากฏในฉากจริงๆ

56
00:05:07,280 --> 00:05:13,850
‫ดังนั้นเราต้องสามารถเก็บตัวแปรที่เป็นตัวชี้ไปยังตัวแสดงได้

57
00:05:14,330 --> 00:05:19,760
‫วิธีที่เราทำสิ่งนี้ ดังที่เราได้เห็นในสไลด์ คือการมีนักแสดงประเภท A

58
00:05:19,760 --> 00:05:28,880
‫แต่เราใส่ดาวไว้ที่ส่วนท้ายซึ่งบอกเราว่านี่ไม่ใช่นักแสดงที่ถูกเก็บไว้ที่นี่ นี่เป็นเพียงที่อยู่ของนักแสดงที่ถูกเก็บไว้

59
00:05:29,150 --> 00:05:39,140
‫เราก็เลยเอาตัวนักแสดงมาและเราจะเรียกเจ้าของรายนี้ จากนั้นเราจะตั้งค่าให้เท่ากับผลลัพธ์ของการเรียกหาเจ้าของ

60
00:05:39,140 --> 00:05:46,970
‫ดังนั้น get owner จึงเป็นหน้าที่ขององค์ประกอบนักแสดงซึ่งช่วยให้คุณได้รับพอยน์เตอร์ของเจ้าของ

61
00:05:46,970 --> 00:05:53,690
‫รับตัวชี้นักแสดงที่ชี้ไปที่เจ้าของ ใส่เครื่องหมายอัฒภาคที่ท้ายบรรทัดนั้น

62
00:05:53,690 --> 00:06:01,670
‫และสิ่งที่เรามีคือตัวแปรที่เก็บที่อยู่ของนักแสดงที่เป็นเจ้าขององค์ประกอบเฉพาะนี้

63
00:06:01,670 --> 00:06:07,580
‫ผมอยากท้าให้คุณทำอะไรบางอย่างโดยการพิมพ์ที่อยู่ของตัวแปรนี้

64
00:06:07,580 --> 00:06:14,690
‫ดังนั้นให้ใช้ตัวแปรนักแสดงและใช้เปอร์เซ็นต์ที่คุณจัดรูปแบบ ระบุในบันทึก

65
00:06:14,690 --> 00:06:19,550
‫เปอร์เซ็นต์ของคุณก็หมายความว่าคุณกำลังใช้จำนวนเต็มที่ไม่ได้ลงนาม

66
00:06:19,550 --> 00:06:25,250
‫นั่นหมายถึงจำนวนเต็มที่ไม่สามารถเป็นค่าลบได้ ซึ่งก็สมเหตุสมผลเพราะที่อยู่ไม่สามารถเป็นค่าลบได้

67
00:06:25,730 --> 00:06:31,790
‫เมื่อเราพูดถึงตำแหน่งที่จะค้นหาหน่วยความจำ แล้วหาว่ามันพิมพ์อะไร ไปเล่น ดูข้อความบันทึก ดู

68
00:06:31,820 --> 00:06:33,980
‫สิ่งที่พิมพ์ออกมา

69
00:06:34,250 --> 00:06:38,000
‫มันเปลี่ยนระหว่างการเล่นที่แตกต่างกันหรือไม่ถ้าคุณหยุดเล่นและเริ่มเล่นอีกครั้ง?

70
00:06:38,000 --> 00:06:41,900
‫แล้วถ้าผู้เสนอญัตติอยู่ในนักแสดงหลายคนล่ะ?

71
00:06:41,900 --> 00:06:45,680
‫มีหลายที่อยู่ที่แตกต่างกันพิมพ์ออกมาในคอนโซลหรือไม่?

72
00:06:45,710 --> 00:06:48,620
‫หยุดวิดีโอชั่วคราวและมีการสอบสวนเล็กน้อย

73
00:06:52,030 --> 00:06:52,390
‫ตกลง.

74
00:06:52,390 --> 00:06:53,410
‫ยินดีต้อนรับกลับ.

75
00:06:53,440 --> 00:07:03,460
‫เราจะไปที่บันทึกของเทศกาลคริสต์มาสนี้ และเราจะบอกว่าเจ้าของผู้เสนอญัตติ ที่อยู่ เปอร์เซ็นต์ทวิภาค

76
00:07:03,490 --> 00:07:04,380
‫คุณ

77
00:07:04,510 --> 00:07:07,540
‫นั่นคือสิ่งที่มันจะใส่ค่าพอยน์เตอร์

78
00:07:07,930 --> 00:07:10,210
‫แล้วเราจะใส่ตัวชี้จริง

79
00:07:10,210 --> 00:07:12,430
‫เราจะมีเจ้าของที่นี่

80
00:07:12,940 --> 00:07:16,360
‫จึงจะพิมพ์ที่อยู่ของเจ้าของ

81
00:07:16,450 --> 00:07:19,150
‫ไปที่ที่ไม่จริงกันเถอะ

82
00:07:19,180 --> 00:07:21,910
‫กดปุ่มควบคุม alt f 11

83
00:07:21,910 --> 00:07:24,610
‫และเมื่อทำการคอมไพล์เสร็จแล้ว มาเล่นกัน

84
00:07:24,610 --> 00:07:32,300
‫และสิ่งที่เราเห็นก็คือที่อยู่ของเจ้าของข้อความบันทึกกำลังส่งเข้ามา และทำให้เรามีจำนวนที่มากสำหรับที่อยู่นี้จริงๆ

85
00:07:32,320 --> 00:07:36,460
‫จะเกิดอะไรขึ้นหากฉันหยุดเล่นและเล่นอีกครั้งเพียงครู่เดียว

86
00:07:36,460 --> 00:07:42,250
‫คุณสามารถเห็นที่อยู่ค่อนข้างแตกต่างอย่างมาก และนั่นเป็นเพราะทุกครั้งที่เราตีเล่น

87
00:07:42,250 --> 00:07:51,850
‫Unreal กำลังสร้างนักแสดงชุดใหม่ทั้งหมดในฉาก โดยพื้นฐานแล้วพร้อมที่จะเล่นโดยเริ่มจากศูนย์

88
00:07:51,850 --> 00:07:57,220
‫นั่นเป็นเหตุผลที่เราเห็นตำแหน่งที่อยู่ใหม่ทุกครั้งที่เราเล่น

89
00:07:57,220 --> 00:08:08,020
‫จะเกิดอะไรขึ้นถ้าฉันไปที่เสาหลักนี้ และเพิ่มองค์ประกอบผู้เสนอญัตติเข้ากับเสาด้วย และเรากดปุ่มเล่นและเลื่อนลงไปที่ด้านล่างของบันทึกของฉัน

90
00:08:08,020 --> 00:08:20,890
‫คุณจะเห็นว่ามีการทำเครื่องหมายที่อยู่สองแห่งที่พิมพ์ออกมาที่นี่ เนื่องจากมีตัวแสดงที่แตกต่างกันสองคนซึ่งถูกจัดเก็บไว้ในหน่วยความจำสองตำแหน่งที่แตกต่างกัน

91
00:08:20,890 --> 00:08:25,990
‫ดังนั้นนี่คือที่อยู่สองแห่ง และคุณจะเห็นได้ว่าจริงๆ แล้วมีความแตกต่างกันค่อนข้างน้อยระหว่างที่อยู่ทั้งสองนี้

92
00:08:25,990 --> 00:08:31,810
‫ซึ่งจะบอกคุณว่า Unreal เก็บข้อมูลไว้เท่าใดในหน่วยความจำ และเหตุใดจึงสำคัญที่จะไม่สร้างประสิทธิภาพให้มีประสิทธิภาพ

93
00:08:31,810 --> 00:08:38,290
‫สำเนามากเกินไป

94
00:08:38,290 --> 00:08:39,700
‫สำหรับการบรรยายครั้งนี้

95
00:08:39,700 --> 00:08:43,570
‫แล้วพบกันใหม่ตอนหน้า เราจะทำเรื่องสนุกๆ มากขึ้นพร้อมคำแนะนำ

