﻿1
00:00:04,380 --> 00:00:06,150
‫สวัสดีและยินดีต้อนรับกลับ

2
00:00:06,240 --> 00:00:12,920
‫ตอนนี้ เรามีการเคลื่อนไหวสำหรับ -- แต่เราไม่ได้หมุนส่วนบนของ -- ซึ่งเราเรียกว่าป้อมปืน

3
00:00:12,930 --> 00:00:16,290
‫ดังนั้นเราจึงต้องการที่จะสามารถทำได้โดยใช้เมาส์ของเรา

4
00:00:16,320 --> 00:00:18,800
‫ทีนี้มาดูว่าเกิดอะไรขึ้นที่นี่

5
00:00:18,810 --> 00:00:23,300
‫ขณะที่ฉันเลื่อนเคอร์เซอร์ของเมาส์ไปทั่วโลก ฉันได้ทรงกลมสีแดงนี้

6
00:00:23,310 --> 00:00:27,060
‫นี่คือ Debug Sphere ที่ฉันกำลังวาดในพื้นที่ 3 มิติ

7
00:00:27,300 --> 00:00:33,600
‫สังเกตตอนที่ฉันเคลื่อนตัวขึ้นไปชิดกับกำแพง ทรงกลมนั้นเคลื่อนตัวไปกับพื้นผิวของผนัง

8
00:00:33,600 --> 00:00:40,410
‫ดังนั้นไม่ว่าเคอร์เซอร์ของเมาส์จะเคลื่อนที่ไปที่ใด ฉันก็จะได้รับความกลัวที่สอดคล้องกับวัตถุใดๆ

9
00:00:40,410 --> 00:00:43,620
‫ก็ตามที่ฉันตีตามตำแหน่งเคอร์เซอร์ของฉัน

10
00:00:43,620 --> 00:00:51,200
‫และนี่จะเป็นประโยชน์สำหรับเรา เพื่อให้เราสามารถมีตำแหน่งในอวกาศที่เราสามารถหมุนป้อมปืนของเราไปทางนั้นได้

11
00:00:51,210 --> 00:00:59,250
‫ในการดำเนินการนี้ มีฟังก์ชันบางอย่างที่เราต้องการบนคอนโทรลเลอร์ ดังนั้นเราจึงต้องเข้าถึงฟังก์ชันเหล่านั้นบนคอนโทรลเลอร์

12
00:00:59,250 --> 00:01:07,080
‫และในวิดีโอนี้ เราจะดำเนินการตั้งค่านั้น และเราจะหารือกันว่าจะเกี่ยวข้องกับแนวคิดที่เรียกว่าการแคสต์อย่างไร

13
00:01:07,080 --> 00:01:14,820
‫เหตุผลที่เราต้องการคอนโทรลเลอร์ก็เพราะมีฟังก์ชันบนคอนโทรลเลอร์ที่ช่วยให้เราได้รับผลการตีภายใต้เคอร์เซอร์

14
00:01:14,820 --> 00:01:16,860
‫ตอนนี้เรากำลังพูดถึงเคอร์เซอร์ของเมาส์

15
00:01:16,860 --> 00:01:20,310
‫สมมติว่านี่คือหน้าจอของเรา และนี่คือเคอร์เซอร์ของเมาส์

16
00:01:20,310 --> 00:01:25,530
‫และจุดที่ปลายเคอร์เซอร์ตรงกับตำแหน่งบนหน้าจอ

17
00:01:25,530 --> 00:01:31,740
‫ตอนนี้ถ้าเราเลื่อนเคอร์เซอร์ไปรอบๆ เป้าหมายของเราคือส่วนป้อมปืนของรถถัง

18
00:01:31,740 --> 00:01:37,290
‫ส่วนบนของตาข่ายจะหมุนเพื่อให้มันหันไปทางเคอร์เซอร์นั้น

19
00:01:37,440 --> 00:01:47,190
‫ตอนนี้ ถ้าเราย้ายเคอร์เซอร์ไปรอบๆ จะมีฟังก์ชันบนคอนโทรลเลอร์ที่เราสามารถใช้เพื่อรับตำแหน่งที่สอดคล้องกับเคอร์เซอร์นั้น

20
00:01:47,190 --> 00:01:52,830
‫ถ้าเราลากเส้นตรงจากกล้องไปที่เคอร์เซอร์แล้วชนวัตถุบางอย่างในโลก

21
00:01:52,830 --> 00:01:59,700
‫เราจะได้ตำแหน่งนั้นและใช้ตำแหน่งนั้นเพื่อกำหนดการหมุนของป้อมปืนรถถัง

22
00:01:59,730 --> 00:02:00,960
‫ให้ฉันแสดงให้คุณเห็นว่าฉันหมายถึงอะไร

23
00:02:00,960 --> 00:02:06,420
‫ตอนนี้ เพื่อให้ได้ตำแหน่งที่ตรงกับเคอร์เซอร์ของเรา เราจำเป็นต้องใช้คอนโทรลเลอร์

24
00:02:06,420 --> 00:02:09,480
‫ตอนนี้ เรามาพูดถึงตัวควบคุมกันสักครู่

25
00:02:09,780 --> 00:02:11,880
‫สมมติว่าเรามีเบี้ยของเราในโลก

26
00:02:11,880 --> 00:02:13,950
‫จำนำจะมีตัวควบคุม

27
00:02:14,130 --> 00:02:18,210
‫นี่คือวัตถุที่มองไม่เห็นที่เกี่ยวข้องกับการจำนำ

28
00:02:18,210 --> 00:02:24,180
‫ตอนนี้ สำหรับผู้จำนำของเรา ผู้ควบคุมของเราจะมีตัวควบคุมผู้เล่นประเภท

29
00:02:24,180 --> 00:02:27,720
‫A และในตอนต้นของเกม ผู้ควบคุมจะมีตัวจำนำ

30
00:02:27,750 --> 00:02:32,790
‫นี่คือเหตุผลที่เราสามารถเห็นได้จากมุมมองของกล้องที่เป็นของถังรับจำนำของเรา

31
00:02:32,790 --> 00:02:34,890
‫ตอนนี้เราสามารถเข้าถึงตัวควบคุมนี้ได้

32
00:02:34,920 --> 00:02:38,970
‫คลาสรถถังของเราสืบทอดฟังก์ชันที่เรียกว่า Get Controller

33
00:02:38,970 --> 00:02:41,100
‫มันสืบทอดมาจากคลาส --

34
00:02:41,100 --> 00:02:46,950
‫สิ่งที่เราอยากทำคือจับคอนโทรลเลอร์นั้นไว้และเก็บไว้ในตัวแปร เพื่อที่เราจะสามารถใช้มันเพื่อเข้าถึงฟังก์ชันที่เราต้องการเพื่อให้ได้ผลลัพธ์ของ

35
00:02:46,950 --> 00:02:51,270
‫Hit ใต้เคอร์เซอร์

36
00:02:51,270 --> 00:02:53,010
‫เรามาตั้งค่าตัวกันเพื่อสิ่งนั้นกันเถอะ

37
00:02:53,010 --> 00:02:58,650
‫ตอนนี้ฉันอยู่ในคลาสรถถัง และสถานที่ที่เราจำเป็นต้องเข้าถึงตัวควบคุมของเราคือการเริ่มเล่น

38
00:02:58,680 --> 00:03:05,190
‫หากเราทำใน Constructor นั่นยังเร็วเกินไปและเราอาจยังไม่มีตัวควบคุมที่ถูกต้อง

39
00:03:05,190 --> 00:03:08,910
‫ดังนั้น เราจำเป็นต้องมีฟังก์ชันเริ่มเล่นในคลาสรถถัง

40
00:03:08,910 --> 00:03:15,090
‫ตอนนี้เรามีมันที่นี่ในคลาสเบสปิงปอง และจนถึงตอนนี้ เรายังไม่ได้ใช้ Begin play ในคลาสเบสปิงปองจริงๆ

41
00:03:15,270 --> 00:03:18,450
‫สิ่งที่ฉันอยากจะทำคือย้ายมันไปที่ระดับรถถัง

42
00:03:18,450 --> 00:03:25,500
‫ดังนั้นฉันจะเน้นที่เริ่มเล่น รวมถึงความคิดเห็นและส่วนที่ได้รับการคุ้มครองที่นี่ และฉันจะตัดมันทิ้งไป

43
00:03:25,500 --> 00:03:28,710
‫แล้วกลับมาที่แทงค์ ฉันจะแปะมัน

44
00:03:28,710 --> 00:03:33,960
‫มาเพิ่มส่วนที่ได้รับการป้องกันไว้ที่นี่ที่ด้านบนส่วนส่วนตัวพร้อมเริ่มเล่นข้างในกัน

45
00:03:33,960 --> 00:03:36,270
‫ตอนนี้เราได้นำ Begin Play ออกจากฐานจำนำแล้ว

46
00:03:36,840 --> 00:03:41,430
‫เราไม่มีมันที่นี่แล้ว แต่เราต้องลบมันออกจากบ่อฐาน cpp ด้วย

47
00:03:41,460 --> 00:03:42,240
‫นี่มัน.

48
00:03:42,240 --> 00:03:48,960
‫เราสามารถดำเนินการต่อและลบมันได้ที่นี่ และตอนนี้เราได้ประกาศใน Tank H แล้ว แต่เราจำเป็นต้องกำหนดในถัง

49
00:03:48,960 --> 00:03:51,330
‫CPP ด้วย

50
00:03:51,360 --> 00:03:55,830
‫ดังนั้นฉันจะกำหนดฟังก์ชันภายใต้การตั้งค่าองค์ประกอบอินพุตของผู้เล่น

51
00:03:55,830 --> 00:04:00,660
‫ดังนั้นมันจะเป็นโมฆะ เริ่มเล่นโดยไม่มีพารามิเตอร์ป้อนเข้า

52
00:04:00,870 --> 00:04:06,840
‫มีตัวฟังก์ชั่นและเราจำเป็นต้องมีถังก่อนแก้ไขชื่อฟังก์ชั่น

53
00:04:06,840 --> 00:04:09,930
‫ตอนนี้เรารู้แล้วว่าการเรียกตัวเองว่ายิ่งใหญ่เป็นเรื่องสำคัญ

54
00:04:09,930 --> 00:04:17,010
‫ด้วยวิธีนี้ฟังก์ชันใด ๆ ในฟังก์ชันเริ่มเล่นและคลาสพาเรนต์ใด ๆ จะยังคงถูกเรียก

55
00:04:17,340 --> 00:04:18,960
‫เรามาเริ่มเล่นกันเลยดีกว่า

56
00:04:18,990 --> 00:04:22,560
‫นี่คือที่ที่เราสามารถรับคอนโทรลเลอร์ของเราและเก็บไว้ในตัวแปรได้

57
00:04:22,560 --> 00:04:25,920
‫กลับไปที่ Tank H และสร้างตัวแปร

58
00:04:25,920 --> 00:04:38,460
‫ตอนนี้นี่จะเป็นแบบส่วนตัวและฉันจะติดไว้ที่ด้านล่างของส่วนส่วนตัวและมันจะเป็นประเภทตัวชี้ตัวควบคุมผู้เล่นและเราสามารถเรียกผู้อ้างอิงตัวควบคุมเครื่องเล่นนี้

59
00:04:38,460 --> 00:04:40,920
‫นี่จะเป็นข้อมูลอ้างอิงของเราไปยังตัวควบคุมผู้เล่น

60
00:04:40,950 --> 00:04:43,590
‫ตอนนี้เราไม่ได้พูดถึงการอ้างอิง C++

61
00:04:43,590 --> 00:04:48,750
‫นี่ยังเป็นเพียงตัวชี้เท่านั้น แต่เราจะใช้สิ่งนี้เพื่ออ้างถึงตัวควบคุมของผู้เล่น

62
00:04:48,750 --> 00:04:57,600
‫ตอนนี้เรามีตัวแปรอ้างอิงตัวควบคุมผู้เล่นที่เป็นตัวควบคุมผู้เล่นประเภท A และเราพร้อมที่จะเก็บตัวควบคุมไว้ในตัวชี้นี้

63
00:04:57,600 --> 00:05:02,730
‫กลับไปที่ Tank Dot CP ที่นี่และเริ่มเล่นและลองทำสิ่งนี้

64
00:05:02,730 --> 00:05:03,330
‫ดังนั้น.

65
00:05:03,400 --> 00:05:12,100
‫สิ่งที่ฉันจะทำคือบอกว่าผู้เล่น ผู้ควบคุม ผู้อ้างอิงเท่ากับ และฉันจะพยายามเรียก get controller

66
00:05:12,880 --> 00:05:17,440
‫ตอนนี้รับคอนโทรลเลอร์ตามที่ฉันพูดถึงว่าอยู่ในคลาส --

67
00:05:17,470 --> 00:05:24,070
‫ให้คลิกขวาและไปที่คำจำกัดความและสังเกตว่าฟังก์ชันนี้ส่งคืนคอนโทรลเลอร์ A

68
00:05:24,100 --> 00:05:29,020
‫ตอนนี้ตัวแปรของเราเป็นตัวควบคุมผู้เล่นประเภท A ไม่ใช่ตัวควบคุม

69
00:05:29,020 --> 00:05:35,260
‫สิ่งที่เราพยายามจะทำในที่นี้คือ นำค่าที่ส่งคืนมาจาก get controller ซึ่งเป็นประเภทพอยน์เตอร์ของคอนโทรลเลอร์

70
00:05:35,260 --> 00:05:40,270
‫และเรากำลังพยายามเก็บไว้ในตัวชี้คอนโทรลเลอร์ของเครื่องเล่น A

71
00:05:40,300 --> 00:05:42,330
‫สังเกตว่าเราเห็นสีแดงขมุกขมัวที่นี่

72
00:05:42,340 --> 00:05:43,940
‫มันบอกค่าของประเภท

73
00:05:43,960 --> 00:05:48,080
‫ไม่สามารถกำหนดตัวชี้คอนโทรลเลอร์ให้กับเอนทิตีประเภทได้

74
00:05:48,100 --> 00:05:49,630
‫ตัวควบคุมผู้เล่น

75
00:05:49,660 --> 00:05:51,210
‫เราได้รับข้อผิดพลาด

76
00:05:51,220 --> 00:05:55,390
‫มาดูเอกสารประกอบสำหรับคอนโทรลเลอร์กัน

77
00:05:55,420 --> 00:05:56,400
‫ลองดูสิ.

78
00:05:56,410 --> 00:05:58,030
‫นี่คือตัวควบคุม

79
00:05:58,030 --> 00:06:00,460
‫และมันบอกว่ามรดก ลำดับชั้น

80
00:06:00,460 --> 00:06:05,690
‫และด้านล่างตัวควบคุม เราจะเห็นตัวควบคุมและตัวควบคุมของผู้เล่น

81
00:06:05,710 --> 00:06:10,210
‫ซึ่งหมายความว่าตัวควบคุมผู้เล่นเป็นคลาสย่อยของตัวควบคุม

82
00:06:10,240 --> 00:06:14,500
‫ตอนนี้ใน C ++ เราไม่สามารถมีตัวชี้ประเภทได้

83
00:06:14,530 --> 00:06:20,200
‫ตัวควบคุมผู้เล่นเก็บค่าที่อยู่ของตัวควบคุม A

84
00:06:20,530 --> 00:06:22,600
‫คอนโทรลเลอร์เป็นประเภทพาเรนต์

85
00:06:22,780 --> 00:06:25,450
‫ตัวควบคุมผู้เล่นเป็นประเภทย่อย

86
00:06:25,450 --> 00:06:30,960
‫คุณไม่สามารถใช้วัตถุประเภทหลักและเก็บไว้ในตัวชี้ประเภทลูก

87
00:06:30,970 --> 00:06:32,680
‫แล้วเราจะหลีกเลี่ยงสิ่งนี้ได้อย่างไร?

88
00:06:32,680 --> 00:06:34,000
‫นี่คือปัญหาของเรา

89
00:06:34,000 --> 00:06:38,630
‫ฟังก์ชัน get controller ส่งคืนที่อยู่ของคอนโทรลเลอร์ A

90
00:06:38,650 --> 00:06:44,410
‫นี่คือสิ่งที่เราสามารถเก็บไว้ในตัวชี้ตัวควบคุม A แต่เราไม่สามารถเก็บไว้ในตัวชี้ตัวควบคุมเครื่องเล่น

91
00:06:44,410 --> 00:06:45,410
‫A

92
00:06:45,430 --> 00:06:52,000
‫ที่ตลกก็คือ แม้ว่า วัตถุที่ส่งคืนโดย get controller นั้นอันที่จริงแล้วเป็นตัวควบคุมของผู้เล่น

93
00:06:52,000 --> 00:06:58,630
‫ดังนั้นเราจึงมีที่อยู่นี้ในรูปแบบของตัวชี้ตัวควบคุม A และเรารู้ว่ามันเก็บตัวควบคุมของผู้เล่น แต่ถ้าเรามีมันในรูปแบบของตัวควบคุม

94
00:06:58,630 --> 00:07:03,910
‫A เราไม่สามารถเข้าถึงฟังก์ชั่นที่เราต้องการได้เพราะมันมีอยู่ในตัวควบคุมของเครื่องเล่น

95
00:07:03,910 --> 00:07:06,210
‫.

96
00:07:06,220 --> 00:07:08,810
‫ฟังก์ชันนี้เรียกว่า get hit result ภายใต้เคอร์เซอร์

97
00:07:08,830 --> 00:07:15,250
‫ตอนนี้ ถ้าเรามีค่าพอยน์เตอร์คอนโทรลเลอร์ชนิด A และเราพยายามรับฟังก์ชันนั้นที่มีอยู่ในคอนโทรลเลอร์ของผู้เล่น

98
00:07:15,250 --> 00:07:18,430
‫เราจะล้มเหลวในการทำเช่นนั้น

99
00:07:18,460 --> 00:07:20,020
‫เราจะได้รับข้อผิดพลาดในการรวบรวม

100
00:07:20,020 --> 00:07:25,960
‫เนื่องจากเรารู้ว่าวัตถุนั้นเป็นตัวควบคุมของผู้เล่น มันจึงถูกเก็บไว้ในตัวชี้ตัวควบคุม A

101
00:07:25,960 --> 00:07:27,610
‫เราจะแก้ไขปัญหานี้ได้อย่างไร

102
00:07:27,610 --> 00:07:29,980
‫คำตอบคือเราต้องแคสต์

103
00:07:30,010 --> 00:07:36,100
‫เรารู้ว่าคอนโทรลเลอร์คือคลาสหลักและคอนโทรลเลอร์ของผู้เล่นคือคลาสย่อย

104
00:07:36,100 --> 00:07:41,320
‫และเรารู้ว่าเราไม่สามารถเก็บคอนโทรลเลอร์ A ไว้ในตัวชี้คอนโทรลเลอร์ A ของผู้เล่นได้

105
00:07:41,320 --> 00:07:47,530
‫เรารู้ว่าเราสามารถไปทางอื่นและมีที่เก็บตัวชี้ตัวควบคุมซึ่งเป็นวัตถุของตัวควบคุมของผู้เล่น

106
00:07:47,620 --> 00:07:53,290
‫นั่นคือสิ่งที่เราเห็นเมื่อเราเรียก get controller มันจะส่งคืนตัวชี้ตัวควบคุม A ที่ชี้ไปที่ตัวควบคุมผู้เล่น

107
00:07:53,290 --> 00:07:55,120
‫A

108
00:07:55,120 --> 00:08:01,810
‫ดังนั้นหากเรามีค่าของตัวชี้ตัวควบคุมประเภท A เราสามารถใช้ฟังก์ชันพิเศษที่เรียกว่าการโยนเพื่อแปลงประเภทของตัวชี้เป็นตัวชี้ตัวควบคุมผู้เล่น

109
00:08:01,810 --> 00:08:05,920
‫A

110
00:08:05,920 --> 00:08:15,640
‫ดังนั้นการแคสต์จะเปลี่ยนประเภทของพอยน์เตอร์ตัวหนึ่งเป็นอีกประเภทหนึ่ง ตราบใดที่ตัวอ็อบเจ็กต์นั้นเป็นประเภทที่เราพยายามแคสต์

111
00:08:15,670 --> 00:08:23,140
‫ตอนนี้ ถ้าเราพยายามที่จะส่งไปยังประเภทที่ไม่ถูกต้อง ตัวอย่างเช่น เรามีตัวชี้ตัวควบคุม A ที่ชี้ไปที่วัตถุตัวควบคุมของผู้เล่น

112
00:08:23,140 --> 00:08:30,820
‫หากเราพยายามแคสต์เพื่อพูดว่า ตัวละคร ฟังก์ชัน cast จะคืนค่า null และเราบอกว่าเราล้มเหลวในการแคสต์

113
00:08:30,820 --> 00:08:33,160
‫ดังนั้นฟังก์ชั่นการแคสต์จึงเป็นแบบนี้

114
00:08:33,190 --> 00:08:36,790
‫เป็นเทมเพลตเหมือนกับสร้างออบเจ็กต์ย่อยเริ่มต้น

115
00:08:36,790 --> 00:08:44,230
‫ฟังก์ชันเทมเพลตนี้จะปรับให้เข้ากับประเภทที่เลือก และในฟังก์ชันนี้ ประเภทที่เราส่งคือประเภทที่เรากำลังแคสต์ด้วย

116
00:08:44,230 --> 00:08:45,400
‫ดังนั้นเราจึงผ่านประเภทนั้น

117
00:08:45,400 --> 00:08:52,570
‫เราต้องการใส่วงเล็บสองอันในวงเล็บมุม และเราส่งตัวชี้ที่เราต้องการใส่ลงในวงเล็บ

118
00:08:52,570 --> 00:08:53,710
‫นี่คือตัวอย่าง

119
00:08:53,710 --> 00:08:59,410
‫สมมติว่าเราต้องการส่งไปยังตัวควบคุมของผู้เล่นและตัวชี้ประเภทตัวควบคุมประเภท A

120
00:08:59,410 --> 00:09:04,240
‫เราส่งตัวชี้ไปที่วงเล็บและประเภทที่เรากำลังส่งไปในวงเล็บเหลี่ยม

121
00:09:04,240 --> 00:09:08,590
‫และสิ่งที่ได้กลับมาคือค่าของตัวชี้ตัวควบคุมผู้เล่นประเภท A

122
00:09:08,590 --> 00:09:13,720
‫ดังนั้นนี่คือการเรียกใช้ฟังก์ชันที่เราส่งประเภทในวงเล็บมุมและค่าตัวชี้ตัวควบคุมที่เราได้รับจากตัวควบคุม

123
00:09:13,720 --> 00:09:18,550
‫get สามารถอยู่ในวงเล็บได้

124
00:09:18,550 --> 00:09:22,630
‫ดังนั้นเราจึงต้องแปลงค่านี้ที่เราได้รับกลับมาจากตัวควบคุม

125
00:09:22,630 --> 00:09:24,250
‫นั่นจะเป็นความท้าทายของคุณ

126
00:09:24,250 --> 00:09:33,550
‫ดังนั้นใน Begin Play ให้ใช้ฟังก์ชัน get controller และส่งค่านั้นไปยังฟังก์ชัน cast และส่งไปยังคอนโทรลเลอร์ของผู้เล่น

127
00:09:33,550 --> 00:09:39,490
‫จากนั้นคุณสามารถเก็บผลลัพธ์ไว้ในตัวชี้อ้างอิงตัวควบคุมเครื่องเล่นของเรา ซึ่งเป็นตัวชี้ตัวควบคุมเครื่องเล่นประเภท

128
00:09:39,490 --> 00:09:40,120
‫A

129
00:09:40,120 --> 00:09:42,580
‫หยุดวิดีโอชั่วคราวและดำเนินการแคสต์

130
00:09:45,530 --> 00:09:45,860
‫ตกลง.

131
00:09:45,860 --> 00:09:49,570
‫ดังนั้นเราจึงทำงานเกือบเสร็จแล้วที่นี่ เราแค่ต้องการแคสต์

132
00:09:49,580 --> 00:09:56,000
‫สิ่งที่เราจะทำคือเรียกฟังก์ชัน cast ซึ่งมีวงเล็บมุมและวงเล็บด้วย

133
00:09:56,000 --> 00:09:59,990
‫และสิ่งที่อยู่ในวงเล็บคือค่าที่เราอยากใส่

134
00:09:59,990 --> 00:10:05,060
‫ตอนนี้รับคอนโทรลเลอร์ส่งคืนตัวชี้ของคอนโทรลเลอร์ Type A

135
00:10:05,060 --> 00:10:07,850
‫ผมจะย้ายมันตรงนี้ไปไว้ในวงเล็บ

136
00:10:07,850 --> 00:10:12,110
‫และประเภทที่เรากำลังแคสต์คือตัวควบคุมผู้เล่น

137
00:10:14,050 --> 00:10:17,620
‫อีกครั้งที่เรากำลังรับค่าที่ส่งคืนโดย get comptroller

138
00:10:17,620 --> 00:10:21,160
‫ส่งคืนตัวชี้ตัวควบคุมหรือที่อยู่

139
00:10:21,160 --> 00:10:25,000
‫จากนั้นเราก็ใช้การแคสต์เพื่อส่งไปยังคอนโทรลเลอร์ของผู้เล่น A

140
00:10:25,000 --> 00:10:31,330
‫เรารู้ว่าวัตถุที่ส่งคืนโดยตัวควบคุมเกตเป็นวัตถุตัวควบคุม A ของผู้เล่นที่เก็บไว้ในตัวชี้ตัวควบคุม

141
00:10:31,330 --> 00:10:32,320
‫A

142
00:10:32,320 --> 00:10:38,500
‫หลังจากที่เราแคสต์แล้ว สิ่งที่ได้กลับมาคือพอยน์เตอร์ของตัวควบคุมผู้เล่นประเภท A

143
00:10:38,500 --> 00:10:41,410
‫ดังนั้นเราจึงเก็บไว้ในผู้อ้างอิงตัวควบคุมผู้เล่น

144
00:10:41,410 --> 00:10:50,830
‫ตอนนี้เราสามารถเข้าถึงตัวควบคุมในรูปแบบของตัวชี้ตัวควบคุมผู้เล่น A เราสามารถเข้าถึงฟังก์ชันที่เราต้องการเพื่อรับผลการติดตามภายใต้เคอร์เซอร์

145
00:10:50,830 --> 00:10:55,570
‫โดยสรุปแล้ว เราใช้ get controller เพื่อเข้าถึงคอนโทรลเลอร์

146
00:10:55,930 --> 00:11:03,040
‫นอกจากนี้เรายังใช้ฟังก์ชัน cast เพื่อส่งจากตัวชี้ตัวควบคุมประเภท A ไปยังตัวชี้ตัวควบคุมของผู้เล่นประเภท

147
00:11:03,040 --> 00:11:03,670
‫A

148
00:11:03,670 --> 00:11:10,000
‫ตอนนี้เราสามารถเข้าถึงฟังก์ชันที่เราต้องการ ซึ่งได้รับผลลัพธ์ภายใต้เคอร์เซอร์ซึ่งมีอยู่ในคลาสตัวควบคุมผู้เล่น

149
00:11:10,000 --> 00:11:11,290
‫A

150
00:11:11,290 --> 00:11:14,500
‫เราจะเริ่มใช้ฟังก์ชันนี้ในวิดีโอหน้า

151
00:11:14,860 --> 00:11:15,850
‫เจอกันเร็วๆนี้ครับ

