﻿1
00:00:04,510 --> 00:00:05,320
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,320 --> 00:00:11,410
‫ในการบรรยายนี้ เราจะทำการ refactoring pull trigger เพื่อให้พร้อมสำหรับการเพิ่มโค้ดเข้าไป

3
00:00:11,410 --> 00:00:15,220
‫ในตอนนี้ มันใกล้จะจบแล้วจริงๆ ดังนั้นเราจะจัดโครงสร้างใหม่ให้เป็นฟังก์ชันเล็กๆ

4
00:00:15,220 --> 00:00:18,760
‫แบบนี้ ซึ่งอ่านตรงไปตรงมากว่ามาก

5
00:00:18,760 --> 00:00:21,280
‫มาดูวิธีการทำ refactor นี้กัน

6
00:00:22,220 --> 00:00:22,460
‫ตกลง.

7
00:00:22,460 --> 00:00:28,640
‫ดังนั้นเราจึงต้องการใส่เสียงเข้าไปในเกมของเรา และสถานที่ที่เราจะทำสิ่งนี้อยู่ในปืนเมื่อเราทำการยิง

8
00:00:28,640 --> 00:00:30,110
‫นั่นคือพอร์ตการโทรแรก

9
00:00:30,110 --> 00:00:33,530
‫ฉันคิดว่าเสียงช็อตที่ดีและเสียงกระทบจะดีมาก

10
00:00:33,890 --> 00:00:39,620
‫ปัญหาเดียวคือเมื่อฉันกลับมาที่ฟังก์ชัน pull trigger ฉันสังเกตเห็นว่ามันมีขนาดใหญ่ผิดปกติ

11
00:00:39,620 --> 00:00:41,180
‫มันไม่พอดีกับหนึ่งในหน้าจอของฉัน

12
00:00:41,180 --> 00:00:45,550
‫นอกจากนี้ยังอ่านและทำความเข้าใจได้ยากว่าเราจะวางฟังก์ชันนี้ไว้ที่ใด

13
00:00:45,560 --> 00:00:50,930
‫ดังนั้นในขณะที่เราพยายามทำความเข้าใจจริงๆ ว่าฟังก์ชันการทำงานคืออะไร บางทีมันอาจจะคุ้มค่าที่จะทำการปรับโครงสร้างใหม่อย่างรวดเร็ว

14
00:00:51,020 --> 00:00:57,500
‫หรือดึงข้อมูลบางส่วนนี้ไปใช้วิธีการอื่นเพื่อไม่ให้อ่านยาก

15
00:00:58,040 --> 00:01:08,570
‫ทีนี้ ถ้าคุณไปดูโค้ดนี้แล้วลองคิดดูว่าโค้ดนี้ใช้ทำอะไร คุณจะเห็นว่าส่วนใหญ่ของโค้ดนี้ถูกตั้งค่าไว้สำหรับสายงานของเรา

16
00:01:08,570 --> 00:01:12,230
‫ติดตามส่วนนี้ทั้งหมดจากบรรทัดที่ 28 ลงไปที่ 43

17
00:01:12,500 --> 00:01:13,910
‫และเรากำลังทำอะไรอยู่?

18
00:01:13,910 --> 00:01:18,980
‫เรากำลังรับจำนำเจ้าของ จากนั้นเรากำลังตรวจสอบการรับคอนโทรลเลอร์ของเจ้าของ จากนั้นเราได้รับวิวพอร์ตจากสิ่งนั้น

19
00:01:18,980 --> 00:01:23,780
‫จากนั้นเราจะได้ตำแหน่งสิ้นสุดตามช่วงสูงสุด

20
00:01:23,780 --> 00:01:26,810
‫จากนั้นเราก็ส่งพารามิเตอร์ Hit บางอย่างเพื่อเพิกเฉยต่อสิ่งต่างๆ

21
00:01:26,810 --> 00:01:33,730
‫ทั้งหมดนี้ถูกตั้งค่าสำหรับการติดตามบรรทัดของเรา ดังนั้นทำไมเราไม่แยกมันออกมาเป็นฟังก์ชันของมันเองที่นี่ล่ะ

22
00:01:34,030 --> 00:01:37,610
‫ฉันจะสร้างฟังก์ชันส่วนตัวใหม่ที่ด้านล่าง

23
00:01:37,610 --> 00:01:46,370
‫หลังจากตัวแปรของเรา มันจะเป็น bool return เพราะเราต้องการแทนที่การเรียกนี้ที่นี่ซึ่งส่งคืนความสำเร็จด้วยอันที่ให้ผลลัพธ์ของ

24
00:01:46,370 --> 00:01:52,430
‫Hit แก่เราเช่นกัน

25
00:01:52,670 --> 00:02:01,550
‫เราจะทำสิ่งนี้ในฐานะที่ผมจะเรียกฟังก์ชันการติดตามปืน และมันจะมีพารามิเตอร์ออกมาตรงนี้

26
00:02:01,550 --> 00:02:03,920
‫กล่าวคือหนึ่งในนั้นจะเป็นผลการตี

27
00:02:03,920 --> 00:02:07,400
‫ดังนั้นกดผลลัพธ์ เครื่องหมายและเพื่อให้เป็นข้อมูลอ้างอิง

28
00:02:07,400 --> 00:02:10,160
‫และเนื่องจากไม่ใช่ค่าอ้างอิงคงที่ เราจึงรู้ว่ามันเป็นพารามิเตอร์ขาออก

29
00:02:10,160 --> 00:02:11,150
‫เราเรียกสิ่งนี้ว่าการตี

30
00:02:11,150 --> 00:02:14,540
‫และจริงๆ แล้ว อาจมีอีกอันที่เราต้องการที่นี่

31
00:02:14,570 --> 00:02:23,300
‫กล่าวคือ ฉันสามารถเห็นได้ว่าเรามีการหมุนออกมาจากโค้ดส่วนนี้ และอันที่จริง เรากำลังปฏิเสธการหมุนนั้น

32
00:02:23,300 --> 00:02:26,630
‫สิ่งที่เราสนใจจริงๆ คือ ทิศทางการยิง

33
00:02:26,630 --> 00:02:28,550
‫บางทีนั่นอาจเป็นสิ่งที่เราต้องไป

34
00:02:28,550 --> 00:02:37,700
‫ฉันจะสร้างพารามิเตอร์ F vector out, ดังนั้น F vector ampersand และมันจะเป็นทิศทางการยิง

35
00:02:38,330 --> 00:02:41,990
‫นี่คือสองเอาท์พุตที่จะมาจากการติดตามปืนของเรา

36
00:02:42,200 --> 00:02:45,620
‫ตอนนี้ ไปข้างหน้าและสร้างการใช้งานที่นี่

37
00:02:46,280 --> 00:02:53,510
‫และสิ่งที่เราต้องการจะทำคือคัดลอกโค้ดทั้งหมดไปไว้ที่นั่น

38
00:02:54,590 --> 00:02:55,760
‫ดูว่ามันไปอย่างไร

39
00:02:56,240 --> 00:03:00,120
‫และเราต้องการตรวจสอบช็อตนี้ด้วย

40
00:03:00,140 --> 00:03:00,980
‫ทิศทาง.

41
00:03:01,520 --> 00:03:05,870
‫นำออกไปที่นั่นและติดไว้ก่อนที่จะสิ้นสุด

42
00:03:05,870 --> 00:03:11,360
‫หรือบางทีที่นี่หลังจากที่เราได้วิวพอร์ตของผู้เล่นแล้ว เราสามารถกำหนดว่าทิศทางการยิงต้องเท่ากับด้านลบ

43
00:03:11,360 --> 00:03:13,310
‫นั่นคือการหมุน

44
00:03:13,520 --> 00:03:19,190
‫แต่สิ่งสำคัญที่ควรทราบคือเราต้องการตั้งค่าไม่ใช่ตัวแปรท้องถิ่น

45
00:03:19,190 --> 00:03:22,520
‫ดังนั้นหากคุณใส่ประเภทที่นี่ มันจะกำหนดทิศทางการยิงในพื้นที่

46
00:03:22,520 --> 00:03:32,600
‫เราต้องการลบสิ่งนั้นเพื่อกำหนดทิศทางการยิงในพารามิเตอร์ ซึ่งจริงๆ แล้วหมายถึงการตั้งค่าทิศทางการยิงที่เราจะส่งผ่านในฟังก์ชันที่เรียกมัน

47
00:03:33,050 --> 00:03:34,730
‫กันไปสำหรับการตี

48
00:03:34,730 --> 00:03:44,300
‫เราจำเป็นต้องลบ Hit ในพื้นที่นี้ เพื่อให้การตีที่ถูกส่งผ่านไปยังการติดตามบรรทัดทีละช่องเป็นการตีที่ส่งต่อไปยังการติดตามปืน

49
00:03:45,140 --> 00:03:51,290
‫และสุดท้าย มีอะไรอีกบ้างที่ต้องทำบรรทัดนี้ ซึ่งตอนนี้ไม่จำเป็น และนี่คือความสำเร็จด้วยหรือไม่?

50
00:03:51,290 --> 00:03:56,240
‫เราแค่ต้องส่งคืนผลลัพธ์ของสัญญาณการติดตามเส้นตามช่องสัญญาณ

51
00:03:56,240 --> 00:03:59,780
‫นั่นเป็นไปได้ว่าการติดตามปืนของเราจะสำเร็จหรือไม่

52
00:03:59,780 --> 00:04:02,450
‫ดังนั้นเราจึงทำให้การเยื้องนี้ลดลงเล็กน้อย

53
00:04:02,450 --> 00:04:06,650
‫ตอนนี้เราใส่ทุกอย่างลงในหน้าจอเดียวได้แล้ว และเข้าใจได้ง่ายขึ้นนิดหน่อยว่า

54
00:04:06,650 --> 00:04:09,440
‫ใช่ ทั้งหมดนี้เกี่ยวข้องกับการติดตามปืน

55
00:04:09,710 --> 00:04:14,990
‫เราสามารถขึ้นไปที่ CP ปืนของเรา และตอนนี้เราสามารถตั้งค่าความสำเร็จ B ของเราที่นี่

56
00:04:14,990 --> 00:04:23,930
‫ดังนั้นความสำเร็จของ bool B เราจะต้องตั้งค่าเป็นการติดตามปืนและเราต้องส่งพารามิเตอร์บางอย่างที่นี่

57
00:04:23,930 --> 00:04:27,020
‫ดังนั้นเรายังคงต้องประกาศที่ไหนสักแห่งหากผลการตี

58
00:04:28,220 --> 00:04:29,420
‫มันจะเป็นหนึ่งในนั้น

59
00:04:29,660 --> 00:04:30,690
‫เดี๋ยวผมโทรไปตี..

60
00:04:30,740 --> 00:04:36,380
‫และอีกอันจะเป็นเวกเตอร์ F ที่เรียกว่า ทิศทางการยิง

61
00:04:37,430 --> 00:04:39,250
‫และกำลังจะผ่านเข้ามา

62
00:04:39,260 --> 00:04:42,410
‫เราจะตีกันก่อน แล้วก็ทิศทางการยิง

63
00:04:44,150 --> 00:04:46,710
‫แล้วเซมิโคลอนต่อท้ายตรงนั้น

64
00:04:46,730 --> 00:04:49,580
‫นั่นจะทำให้ง่ายขึ้นนิดหน่อย

65
00:04:49,610 --> 00:04:59,720
‫อย่างไรก็ตาม ฉันสังเกตเห็นว่าเราต้องการตัวควบคุมเจ้าของด้วย และฉันไม่ต้องการให้การติดตามปืนต้องรับผิดชอบต่อตัวควบคุมเจ้าของหรือลืมตัวควบคุมของเจ้าของ

66
00:04:59,720 --> 00:05:03,450
‫ฟังดูเหมือนไม่ใช่หน้าที่ของการติดตามปืนที่จะทำอย่างนั้น

67
00:05:03,470 --> 00:05:05,560
‫มันฟังดูโอเคที่จะโดน

68
00:05:05,570 --> 00:05:07,580
‫ฟังดูโอเคที่จะได้ทิศทางการยิง

69
00:05:07,580 --> 00:05:10,550
‫แต่ฉันจะวาดเส้นในการรับตัวควบคุมเจ้าของ

70
00:05:10,550 --> 00:05:18,770
‫เพื่อการนั้น ผมจะใส่มันเข้าไป ใส่โค้ดทั้งหมดนี้ลงในฟังก์ชันอื่นที่ทั้งคู่สามารถเรียกได้

71
00:05:19,010 --> 00:05:23,960
‫มันจะเป็นฟังก์ชันที่คืนค่าคอนโทรลเลอร์

72
00:05:24,880 --> 00:05:25,810
‫ดาว.

73
00:05:26,560 --> 00:05:32,830
‫และเราจะเรียกมันว่าตัวควบคุม และเราจะทำให้เป็นคอนเสิร์ตได้

74
00:05:32,830 --> 00:05:39,030
‫อย่างที่เราทราบ มันไม่ได้หมายถึงการเปลี่ยนตัวแปรใด ๆ ในคลาสปืนของเรา

75
00:05:39,040 --> 00:05:40,780
‫มาสร้างการใช้งานกัน

76
00:05:40,780 --> 00:05:52,090
‫เพียงแค่นำการใช้งานจากการติดตามปืนเข้ามา แก้ไขการเยื้องหากจำเป็น แล้วเราจะดำเนินการต่อและเพียงแค่คืนการควบคุมของเจ้าของ

77
00:05:52,090 --> 00:05:54,100
‫ดังนั้นจึงไม่จำเป็นต้องทำการตรวจสอบเป็นโมฆะที่นี่

78
00:05:54,220 --> 00:05:58,000
‫การตรวจสอบค่าว่างที่เราต้องทำในฟังก์ชันที่กำลังใช้งานอยู่

79
00:05:58,180 --> 00:06:00,130
‫ดังนั้นเราจะนำสิ่งนั้นมาไว้ที่นั่น

80
00:06:00,130 --> 00:06:02,950
‫เราไม่จำเป็นต้องตั้งค่าตัวแปรในที่นี้ด้วย

81
00:06:02,950 --> 00:06:04,870
‫เราสามารถไปข้างหน้าและกลับมา

82
00:06:06,560 --> 00:06:08,660
‫มันจะค่อนข้างตรงไปตรงมา

83
00:06:08,660 --> 00:06:11,030
‫ฉันได้รับตัวควบคุม แต่ไม่สมบูรณ์

84
00:06:11,210 --> 00:06:14,840
‫จากนั้นเราจะตั้งค่าตัวแปรในการติดตามปืน

85
00:06:14,840 --> 00:06:19,550
‫ดังนั้นเจ้าของผู้ควบคุมจะได้รับตัวควบคุมของเจ้าของเช่นนั้น

86
00:06:20,380 --> 00:06:30,430
‫ซึ่งจากนั้นเราจะทำการคืนค่า null ให้เป็นค่า null ก่อนการกลับมาในการติดตามปืน ซึ่งอีกอย่าง มันจำเป็นต้องคืนค่าบูลีนเพราะการติดตามปืนเป็นการคืนค่าบูลีน

87
00:06:30,700 --> 00:06:36,610
‫ดังนั้นเราจึงสามารถย้อนกลับและคืนค่าเท็จได้ที่นี่ เพราะถ้าเราไม่สามารถหาตัวควบคุมของเจ้าของได้ เราไม่สามารถติดตามปืนได้

88
00:06:36,610 --> 00:06:38,530
‫ดังนั้นเราจึงไม่สามารถตีอะไรได้

89
00:06:39,250 --> 00:06:42,880
‫จากนั้นเราก็ต้องการตัวควบคุมเจ้าของนั้นเพิ่มเติม

90
00:06:43,780 --> 00:06:47,860
‫ที่ที่เรามีนักแสดงที่โด่งดังของเรา เรากำลังทำสิ่งนี้ได้รับความเสียหาย

91
00:06:48,220 --> 00:06:54,310
‫และโดยพื้นฐานแล้ว สิ่งที่เราอยากทำที่นี่คือให้เจ้าของคอนโทรลเลอร์อยู่ในตัวนักแสดงยอดนิยมของเรา

92
00:06:54,310 --> 00:06:56,760
‫ดังนั้นถ้าเราตีนักแสดง เราก็จะได้เจ้าของตัวควบคุมอีกครั้ง

93
00:06:56,770 --> 00:07:00,250
‫ฉันรู้ว่ามีคนตามรอยปืนนิดหน่อย

94
00:07:00,250 --> 00:07:03,400
‫รับคอนโทรลเลอร์แล้วเราจะทำอีกครั้งถ้าเราโดนนักแสดง

95
00:07:03,520 --> 00:07:06,280
‫แต่นั่นจะเกิดขึ้นทุกครั้งที่เราไปพบนักแสดง

96
00:07:06,280 --> 00:07:16,990
‫ดังนั้นฉันจึงไม่รังเกียจที่จะต้องคำนวณใหม่สองครั้ง เพราะมันจะทำให้โค้ดอ่านง่ายขึ้นเล็กน้อยโดยไม่ต้องเก็บตัวแปรและสถานะที่อาจไม่ซิงค์กัน

97
00:07:16,990 --> 00:07:17,920
‫ดังนั้นคุณไป

98
00:07:17,920 --> 00:07:24,280
‫ตอนนี้เรามีตัวควบคุมสำหรับเจ้าของที่เราต้องการสำหรับรับความเสียหาย และทริกเกอร์การดึงของเราดูดีขึ้นมาก

99
00:07:24,280 --> 00:07:25,240
‫สำหรับการบรรยายครั้งนี้

100
00:07:25,240 --> 00:07:25,780
‫หนึ่งอย่างรวดเร็ว

101
00:07:25,780 --> 00:07:31,180
‫แค่ปรับโครงสร้างทริกเกอร์ดึงของเราใหม่เพื่อให้เรามีฐานที่ดีในการทำงานในการบรรยายครั้งต่อไป

102
00:07:31,180 --> 00:07:31,870
‫แล้วเจอกัน

103
00:07:32,800 --> 00:07:37,300
‫โอ้และดูเหมือนว่าฉันทำ booboo เล็กน้อยที่นี่ในตัวควบคุม get owner

104
00:07:37,330 --> 00:07:43,210
‫หากคุณพยายามคอมไพล์ มันจะไม่ทำอะไรเลยเพราะค่าที่ส่งกลับนี้ไม่ได้ส่งคืนตัวชี้จริงๆ

105
00:07:43,210 --> 00:07:47,620
‫ดังนั้นเราจึงต้องการคืนค่าตัวชี้ว่างในกรณีนี้ทันที

106
00:07:47,620 --> 00:07:50,380
‫โดยทั่วไปเราไม่สามารถรับจำนำ จากนั้นเราไม่สามารถรับผู้ควบคุมได้

107
00:07:50,380 --> 00:07:52,030
‫ดังนั้นเราจึงส่งคืนตัวชี้ค่าว่าง

