﻿1
00:00:04,080 --> 00:00:05,730
‫สวัสดีและยินดีต้อนรับกลับ

2
00:00:05,760 --> 00:00:10,380
‫ตอนนี้เราพร้อมที่จะหมุนป้อมปืนแล้ว และเราต้องการทำสิ่งนี้โดยใช้เมาส์

3
00:00:10,380 --> 00:00:14,790
‫และตำแหน่ง Hit นั้นจากการติดตามที่เราได้ทำในวิดีโอที่แล้ว

4
00:00:14,880 --> 00:00:22,200
‫ขณะที่ฉันเลื่อนเคอร์เซอร์ของเมาส์ ป้อมปืนจะหมุนและหันไปทางเคอร์เซอร์ของเมาส์

5
00:00:22,320 --> 00:00:28,110
‫และแม้เมื่อฉันคลิกในวิวพอร์ตและเริ่มเล่น ฉันยังคงสามารถเลื่อนเคอร์เซอร์ของเมาส์ไปรอบๆ

6
00:00:28,110 --> 00:00:31,080
‫เพื่อหมุนป้อมปืนและกำหนดทิศทางได้

7
00:00:31,110 --> 00:00:35,850
‫สิ่งนี้จะทำให้ฉันสามารถเล็งได้เมื่อฉันมีความสามารถในการยิงขีปนาวุธ

8
00:00:35,880 --> 00:00:36,200
‫ตกลง.

9
00:00:36,240 --> 00:00:41,770
‫เพื่อให้บรรลุสิ่งนี้ เราต้องหาทิศทางที่เราต้องการให้ป้อมปืนชี้ไป

10
00:00:41,790 --> 00:00:46,410
‫และเมื่อเราพบทิศทางนั้นแล้ว เราก็สามารถตั้งค่าการหมุนตาข่ายของป้อมปืนได้

11
00:00:46,500 --> 00:00:53,500
‫ทีนี้ เพื่อให้ได้ทิศทางที่เราต้องการให้ป้อมปืนชี้ไป เราจำเป็นต้องคำนวณเวกเตอร์เล็กน้อย

12
00:00:53,520 --> 00:00:59,570
‫สิ่งที่เรากำลังมองหาคือเวกเตอร์จากป้อมปืนของรถถังไปยังตำแหน่งที่ตีตามรอยของเรา

13
00:00:59,580 --> 00:01:06,960
‫ตอนนี้ เราสามารถหาตำแหน่งของรถถังของเราหรือส่วนประกอบใดๆ ของมันได้อย่างง่ายดาย เช่น ตำแหน่งของป้อมปืนของรถถัง

14
00:01:06,990 --> 00:01:09,600
‫เราจะเรียกตำแหน่งนี้ว่า ป้อมปืน ตำแหน่ง

15
00:01:09,600 --> 00:01:13,440
‫และเรารู้ด้วยว่าเราจะหาตำแหน่งของหัวติดตามได้อย่างไร

16
00:01:13,470 --> 00:01:15,800
‫เราจะเรียกตำแหน่งการติดตามนี้

17
00:01:15,810 --> 00:01:20,760
‫สิ่งที่เราสนใจคือเวกเตอร์จากตำแหน่งป้อมปืนไปยังตำแหน่งที่ตี

18
00:01:20,760 --> 00:01:23,100
‫เราจะเรียกเวกเตอร์นี้เพื่อกำหนดเป้าหมาย

19
00:01:23,130 --> 00:01:27,030
‫ตอนนี้คณิตศาสตร์เวกเตอร์เพื่อให้ได้เป้าหมายนั้นค่อนข้างง่าย

20
00:01:27,060 --> 00:01:33,120
‫ในการรับเวกเตอร์จากจุดเริ่มต้นไปยังจุดสิ้นสุด จะเป็นจุดสิ้นสุดลบด้วยจุดเริ่มต้นเสมอ

21
00:01:33,420 --> 00:01:41,620
‫ดังนั้นหากเราหาร่องรอย ตีตำแหน่ง และลบตำแหน่งเวกเตอร์ของป้อมปืน เวกเตอร์ที่เป็นผลจากสิ่งนี้จะกำหนดเป้าหมาย

22
00:01:41,640 --> 00:01:49,530
‫ตอนนี้ เมื่อเรามีเวกเตอร์ทิศทางเป้าหมายสองทิศทางแล้ว เราต้องการแปลงเป็นการหมุน เพื่อให้เราสามารถตั้งค่าการหมุนของป้อมปืนของรถถังได้

23
00:01:49,530 --> 00:01:53,750
‫และประเภทเวกเตอร์มีฟังก์ชันที่เรียกว่าการหมุน

24
00:01:53,760 --> 00:02:02,260
‫ดังนั้นถ้าเราเอาเวกเตอร์เป้าหมายของเราและเรียกการหมุนบนมัน มันจะคืนค่า F rotator ที่สอดคล้องกับทิศทางนั้น

25
00:02:02,280 --> 00:02:04,430
‫ตอนนี้เราต้องจำบางอย่างไว้

26
00:02:04,440 --> 00:02:14,620
‫ผลการตีตามรอยมักจะอยู่บนพื้น และเวกเตอร์จากป้อมปืนรถถังไปยังผลการตีตามรอยจะไม่ขนานกับพื้น

27
00:02:14,640 --> 00:02:20,850
‫ซึ่งหมายความว่าถ้าเราตั้งค่าการหมุนป้อมปืนของรถถังไปที่ตัวหมุนที่เราได้รับจากเวกเตอร์ทิศทางนั้น

28
00:02:20,850 --> 00:02:29,310
‫เราอาจได้สิ่งนี้โดยที่ป้อมปืนทำมุมลงไปที่พื้น แต่เราไม่ต้องการให้ป้อมปืนของรถถังหมุนลงด้านล่าง

29
00:02:29,310 --> 00:02:31,350
‫เราต้องการให้มันยังคงชี้ไปข้างหน้า

30
00:02:31,350 --> 00:02:33,780
‫นี่คือผลลัพธ์ที่เราต้องการ

31
00:02:33,810 --> 00:02:39,180
‫กล่าวอีกนัยหนึ่ง เราเพียงต้องการเปลี่ยนส่วนประกอบ ใช่ ของการหมุนป้อมปืนของรถถัง

32
00:02:39,180 --> 00:02:44,550
‫ดังนั้นมันจึงชี้ไปในทิศทางที่ถูกต้องแต่ยังคงขนานกับพื้น

33
00:02:44,550 --> 00:02:51,600
‫เราแค่เปลี่ยนการหันเหของมัน ดังนั้น กลับไปที่รหัส VS และสร้างฟังก์ชันสำหรับการหมุนป้อมปืนของรถถัง

34
00:02:51,630 --> 00:02:57,210
‫ตอนนี้เรากำลังจะหมุนป้อมปืนบนรถถัง แต่เราต้องการหมุนป้อมปืนบนป้อมศัตรูของเราด้วย

35
00:02:57,210 --> 00:03:08,820
‫และในไม่ช้าหอคอยจะถูกสร้างขึ้นมาจากฐานปอน ซึ่งหมายความว่าถ้าเราสร้างป้อมปืนที่หมุนได้ ฟังก์ชั่นเราสามารถวางไว้ที่นี่ในคลาสปิงปองฐาน

36
00:03:08,820 --> 00:03:12,930
‫ด้วยวิธีนี้ทั้งรถถังและหอคอยจะสืบทอดฟังก์ชันนี้

37
00:03:12,930 --> 00:03:18,480
‫เนื่องจากเราวางแผนที่จะใช้งานทั้งในหอคอยและในถัง เราจึงสามารถป้องกันฟังก์ชันนี้ได้

38
00:03:18,720 --> 00:03:24,630
‫ดังนั้นฉันจะเพิ่มส่วนที่ได้รับการป้องกันและฟังก์ชันและตัวแปรที่เราวางไว้ในส่วนที่ได้รับการป้องกันจะสามารถเข้าถึงได้ในคลาสย่อยเหล่านี้

39
00:03:24,630 --> 00:03:29,220
‫แต่ไม่ใช่ในคลาสอื่น

40
00:03:29,220 --> 00:03:32,580
‫ดังนั้นจึงเกือบจะจำกัดเป็นตัวแปรส่วนตัว

41
00:03:32,580 --> 00:03:34,860
‫ตอนนี้ฟังก์ชันนี้สามารถคืนค่าเป็นโมฆะได้

42
00:03:34,860 --> 00:03:37,710
‫ฉันจะเรียกป้อมปืนหมุนนี้

43
00:03:38,850 --> 00:03:44,690
‫และเพื่อจะหมุนป้อมปืนได้ ฉันจะต้องมีจุดหมายที่จะดู

44
00:03:44,700 --> 00:03:49,620
‫นี่อาจเป็นเวกเตอร์ f และเราเรียกสิ่งนี้ว่าการมองที่เป้าหมายได้

45
00:03:49,620 --> 00:04:00,360
‫แนวคิดก็คือถ้าเรามีฟังก์ชันที่สามารถส่งผ่านในตำแหน่งใดที่หนึ่งในโลกได้ ฟังก์ชันนี้ก็จะส่งผลให้ป้อมปืนหมุนไปยังตำแหน่งนั้นได้

46
00:04:00,360 --> 00:04:04,680
‫ไปข้างหน้าและให้คำจำกัดความของฟังก์ชันสำหรับป้อมปืนหมุน

47
00:04:04,680 --> 00:04:11,280
‫ดังนั้นใน CP เบี้ยฐาน ใต้คอนสตรัคเตอร์ ฉันจะใช้ป้อมปืนหมุน

48
00:04:11,280 --> 00:04:16,680
‫และแน่นอนว่าฉันต้องการชื่อคลาสตัวรับจำนำพื้นฐานพร้อมตัวดำเนินการแก้ไขขอบเขตที่นี่

49
00:04:16,680 --> 00:04:21,180
‫ตอนนี้ฉันมีป้อมปืนหมุนแล้ว ลองคิดดูว่าเราจะใช้งานมันอย่างไร

50
00:04:21,180 --> 00:04:30,120
‫สิ่งแรกที่เราต้องการคือการกำหนดเป้าหมายเวกเตอร์เวกเตอร์จากส่วนประกอบป้อมปืนไปยังผลลัพธ์การติดตามภายใต้เคอร์เซอร์ของเมาส์

51
00:04:30,120 --> 00:04:38,970
‫นี่อาจเป็นเวกเตอร์ F ในพื้นที่ที่เรียกไปยังเป้าหมาย และเราจะกำหนดให้มันเท่ากับผลลัพธ์ของคณิตศาสตร์เวกเตอร์

52
00:04:38,970 --> 00:04:43,350
‫จำไว้ว่ามันจะเป็นปลายทางลบจุดเริ่มต้น

53
00:04:43,350 --> 00:04:50,910
‫และปลายทางจะดูที่เป้าหมายและจุดเริ่มต้นจะเป็นตำแหน่งของป้อมปืนของรถถัง กล่าวคือ

54
00:04:50,910 --> 00:04:54,030
‫ตำแหน่งของตาข่ายป้อมปืน

55
00:04:54,030 --> 00:04:59,880
‫เราสามารถพูดได้ว่า turret mesh และเราสามารถหาตำแหน่งของ mesh turret ได้

56
00:04:59,880 --> 00:05:07,290
‫ตอนนี้วิธีรับตำแหน่งโลกของส่วนประกอบด้วยฟังก์ชันนี้ รับตำแหน่งส่วนประกอบ

57
00:05:07,290 --> 00:05:09,630
‫เป็นของคลาสคอมโพเนนต์ฉากใช้

58
00:05:09,630 --> 00:05:11,460
‫ดังนั้นองค์ประกอบฉากทั้งหมดจึงมี

59
00:05:11,460 --> 00:05:15,690
‫ดังนั้นจากตาข่ายป้อมปืน เราจะเรียกตำแหน่งที่ได้รับส่วนประกอบ

60
00:05:16,340 --> 00:05:24,290
‫ลองดูที่เป้าหมายลบตำแหน่งตาข่ายของป้อมปืนให้เวกเตอร์จากตาข่ายของป้อมปืนไปยังเป้าหมายที่ระวัง

61
00:05:24,320 --> 00:05:30,590
‫ดังที่ฉันได้กล่าวไปแล้ว เราสามารถรับตัวหมุน EF จากเป้าหมายโดยใช้ฟังก์ชันการหมุนเวกเตอร์ F

62
00:05:30,590 --> 00:05:40,100
‫เราจะสร้างตัวหมุน F และเราสามารถเรียกสิ่งนี้ว่าการหมุน และเราจะตั้งค่าให้เท่ากับการหมุนจุดเป้าหมาย

63
00:05:40,280 --> 00:05:41,570
‫นั่นคือการเรียกใช้ฟังก์ชัน

64
00:05:41,570 --> 00:05:46,700
‫ตอนนี้เรามีตัวหมุนที่สอดคล้องกับสิ่งนี้กับเวกเตอร์ทิศทางเป้าหมาย

65
00:05:46,700 --> 00:05:49,550
‫แต่ประเด็นคือเราสนใจแต่ YA เท่านั้น

66
00:05:49,550 --> 00:05:51,680
‫เราไม่ต้องการที่จะเปลี่ยนสนามหรือบทบาท

67
00:05:51,680 --> 00:05:57,290
‫เราเพียงต้องการหมุนป้อมปืนรอบแกน z และให้ขนานกับพื้น

68
00:05:57,290 --> 00:05:59,420
‫ตอนนี้เราสามารถทำได้หลายวิธี

69
00:05:59,420 --> 00:06:05,870
‫อย่างแรก เราสามารถดูที่การหมุน ระยะพิทช์ และศูนย์นั้นได้

70
00:06:05,870 --> 00:06:08,180
‫กล่าวอีกนัยหนึ่ง ตั้งค่าให้เท่ากับศูนย์

71
00:06:08,210 --> 00:06:14,240
‫นอกจากนี้เรายังสามารถดูบทบาทการหมุนจุดและเป็นศูนย์ได้เช่นกัน

72
00:06:14,240 --> 00:06:21,020
‫หลังจากที่เราตั้งค่า pitch และ roll เป็นศูนย์ เราก็มีการหมุนที่ต้องการ ซึ่งเป็นส่วนประกอบเท่านั้น

73
00:06:21,020 --> 00:06:22,460
‫นี่เป็นวิธีหนึ่งที่จะทำ

74
00:06:22,460 --> 00:06:26,450
‫อีกอย่างคือการใช้ตัวสร้าง F rotator โอเวอร์โหลดตัวใดตัวหนึ่ง

75
00:06:26,450 --> 00:06:38,300
‫ถ้าเราบอกว่า f rotator ด้วยวงเล็บและส่งผ่านในค่าบางอย่างเช่นจุดศูนย์ F สำหรับอันแรกและป๊อปอัปกำลังบอกฉันว่าอินพุตแรกนั้นเป็นระดับเสียง

76
00:06:38,300 --> 00:06:43,880
‫จากนั้นสำหรับ ya เราสามารถใช้เพื่อกำหนดเป้าหมายการหมุน

77
00:06:44,330 --> 00:06:44,990
‫ใช่.

78
00:06:44,990 --> 00:06:47,960
‫และสำหรับบทบาทนี้ เราสามารถใช้ศูนย์จุด F

79
00:06:47,960 --> 00:06:55,820
‫ตอนนี้สิ่งที่ทำคือสร้าง F rotator ใหม่โดยมีค่าศูนย์สำหรับ pitch, ศูนย์สำหรับบทบาทและส่วนประกอบของ

80
00:06:55,820 --> 00:06:59,420
‫rotator ที่ส่งคืนโดยการหมุนเป้าหมายสองครั้ง

81
00:06:59,420 --> 00:07:05,300
‫ค่าที่ส่งคืนโดยสิ่งนี้จะให้ผลลัพธ์เดียวกันกับที่เราทำกับสามบรรทัดนี้

82
00:07:05,300 --> 00:07:11,990
‫เนื่องจากมันดูกะทัดรัดและสวยงามขึ้นเล็กน้อย ฉันคิดว่าฉันควรใช้สิ่งนี้เพื่อให้เราสามารถเริ่มต้นการดูเวกเตอร์การหมุนด้วย

83
00:07:11,990 --> 00:07:19,370
‫F rotator ที่ส่งคืนโดยเรียกตัวสร้าง F rotator แบบนี้

84
00:07:19,370 --> 00:07:21,380
‫ผมจะลบบรรทัดนี้ลงตรงนี้

85
00:07:21,380 --> 00:07:23,360
‫และตอนนี้เรามาดูการหมุน

86
00:07:23,360 --> 00:07:29,000
‫ตอนนี้ สิ่งสุดท้ายที่ต้องทำในฟังก์ชันนี้คือการตั้งค่าการหมุนสำหรับ mash ของป้อมปืน

87
00:07:29,000 --> 00:07:38,270
‫ตอนนี้ เราสามารถตั้งค่าการหมุนสำหรับส่วนประกอบที่กำหนดโดยใช้ฟังก์ชันนี้ ตั้งค่าการหมุนของโลกอีกครั้ง มันเป็นของการใช้ส่วนประกอบฉาก

88
00:07:38,270 --> 00:07:50,420
‫และเหตุผลที่เราใช้การหมุนคำที่กำหนดแทนที่จะเพิ่มออฟเซ็ตการหมุนในเครื่องก็เพราะเรามีการหมุนในเป้าหมายโลกอวกาศที่สองคือเวกเตอร์ทิศทางอวกาศโลก

89
00:07:50,420 --> 00:07:56,750
‫เรากำลังนำตำแหน่งตาข่ายของป้อมปืนในอวกาศโลกและลบตำแหน่งเป้าหมายในอวกาศโลก

90
00:07:56,750 --> 00:07:58,850
‫นี่คือทิศทางของอวกาศของโลก

91
00:07:58,850 --> 00:08:02,450
‫ดังนั้นการดูการหมุนก็คือการหมุนของอวกาศโลก

92
00:08:02,450 --> 00:08:06,140
‫เราจะใช้การตั้งค่าการหมุนของโลกบนตาข่ายของป้อมปืน

93
00:08:06,290 --> 00:08:13,280
‫เราจะบอกว่าตาข่ายป้อมปืน ตั้งค่าการหมุนของโลก และเราจะพิจารณาการหมุน

94
00:08:13,280 --> 00:08:19,550
‫ดังนั้น ตอนนี้ เรามีฟังก์ชันที่สามารถจับเป้าหมายใดๆ ในโลกแล้วหมุนตาข่ายของป้อมปืนเพื่อดูมัน

95
00:08:19,550 --> 00:08:22,550
‫แต่มันจะไม่หมุนตาข่ายลงด้านล่าง

96
00:08:22,550 --> 00:08:28,100
‫มันก็แค่เปลี่ยนการหันเหของมัน ดังนั้นมันจะหมุนในลักษณะที่ป้อมปืนของรถถังจะหมุน

97
00:08:28,100 --> 00:08:31,100
‫ตอนนี้เรามีฟังก์ชั่นหมุนป้อมปืน

98
00:08:31,130 --> 00:08:38,870
‫ฉันจะขอท้าให้คุณเรียกใช้ฟังก์ชันนี้เพื่อตั้งค่าการหมุนของป้อมปืน เรียกฟังก์ชันการหมุนของป้อมปืนในประเภทรถถัง

99
00:08:38,870 --> 00:08:40,730
‫นี่คือฟังก์ชันที่ได้รับการป้องกัน

100
00:08:40,730 --> 00:08:43,070
‫ดังนั้นระดับรถถังจึงสามารถเข้าถึงได้

101
00:08:43,070 --> 00:08:49,220
‫ตอนนี้ป้อมปืนหมุนได้เวกเตอร์ F ดูที่เป้าหมาย คุณจะใช้จุดกระทบนั้นในผลการตี

102
00:08:49,220 --> 00:08:51,410
‫F จากการติดตามเส้นของเรา

103
00:08:51,410 --> 00:08:57,170
‫ฉันจะปล่อยให้คุณค้นหาตำแหน่งที่ถูกต้องในโค้ดเพื่อเรียกใช้ฟังก์ชันนี้

104
00:08:57,410 --> 00:09:00,920
‫ดังนั้นหยุดวิดีโอชั่วคราวและวางฟังก์ชั่นหมุนป้อมปืน

105
00:09:00,920 --> 00:09:02,870
‫โทรในชั้นถัง

106
00:09:06,000 --> 00:09:06,150
‫ตกลง.

107
00:09:06,300 --> 00:09:09,960
‫ดังนั้นเราจึงมีฟังก์ชั่นการหมุนของป้อมปืน และเราพร้อมที่จะเรียกมันว่า

108
00:09:10,140 --> 00:09:18,200
‫ฉันจะไปที่แทงค์และนี่คือฟังก์ชันติ๊กของฉันภายใน if check for player controller ref.

109
00:09:18,210 --> 00:09:25,860
‫ฉันมีผลลัพธ์ของ Hit และหลังจากที่เรียกผลลัพธ์ที่ได้รับภายใต้เคอร์เซอร์แล้ว ผลลัพธ์ของ Hit จะมีข้อมูลที่ถูกต้อง

110
00:09:25,860 --> 00:09:30,480
‫ที่จริงแล้ว เรากำลังใช้จุดกระทบต่อผลลัพธ์ของการโจมตีและวาดทรงกลมดีบั๊ก

111
00:09:30,510 --> 00:09:35,370
‫ตอนนี้เนื่องจากฉันไม่ต้องการวาด debug sphere อีกต่อไป ฉันจะดำเนินการต่อและลบมัน

112
00:09:35,370 --> 00:09:39,900
‫และฉันจะเรียกฟังก์ชันป้องกันของเราหมุนป้อมปืนแทน

113
00:09:39,900 --> 00:09:45,750
‫และสำหรับการดูเป้าหมาย ฉันจะผ่านจุดกระทบจุดกระทบผลลัพธ์

114
00:09:47,140 --> 00:09:53,320
‫ดังนั้นตอนนี้ทุกเฟรม เราจะหมุนป้อมปืนไปยังจุดกระทบนั้นจากผลการตีของเรา

115
00:09:53,350 --> 00:10:00,130
‫ก่อนที่ฉันจะคอมไพล์สิ่งนี้ ฉันไม่ได้ใช้ตัวช่วยดีบักการวาดอีกต่อไป ดังนั้นฉันจะดำเนินการต่อและลบไฟล์ส่วนหัวนั้น

116
00:10:00,340 --> 00:10:00,820
‫ตกลง.

117
00:10:00,850 --> 00:10:02,590
‫ตอนนี้ฉันพร้อมที่จะรวบรวม

118
00:10:02,970 --> 00:10:03,360
‫ตกลง.

119
00:10:03,370 --> 00:10:05,050
‫ฉันกลับมาที่นี่ในบรรณาธิการ

120
00:10:05,080 --> 00:10:09,440
‫ลองไปกดเล่นและลองดู

121
00:10:09,460 --> 00:10:11,460
‫มันอัศจรรย์มาก.

122
00:10:11,470 --> 00:10:12,910
‫ฉันยังคงกลิ้งไปมาได้

123
00:10:12,910 --> 00:10:18,910
‫ฉันสามารถขยับเมาส์และป้อมปืนหมุนได้ทุกที่ที่ฉันเลื่อนเคอร์เซอร์ของเมาส์

124
00:10:18,910 --> 00:10:20,350
‫ดังนั้นนี่จึงเป็นสิ่งที่ยอดเยี่ยม

125
00:10:20,600 --> 00:10:25,750
‫โอเค ก่อนที่เราจะสรุปเรื่องนี้ ฉันขอพูดถึงสองสามประเด็นก่อน

126
00:10:25,750 --> 00:10:28,900
‫ฉันต้องการให้มันดูดีและสวยงาม

127
00:10:28,930 --> 00:10:36,890
‫ตอนนี้ ปัญหาแรกเกิดขึ้นเมื่อฉันเลื่อนเคอร์เซอร์ของเมาส์ไปใกล้กับศูนย์กลางของรถถังแล้วผ่านมันไป

128
00:10:36,910 --> 00:10:42,670
‫คุณจะเห็นว่าในบางจุดการหมุนจะหมุนเร็วมาก

129
00:10:42,670 --> 00:10:48,250
‫และถ้าเราเลื่อนเมาส์ไปมาในลักษณะจับจด นั่นก็ดูไม่ดีนัก

130
00:10:48,250 --> 00:10:49,480
‫มันหัก.

131
00:10:49,480 --> 00:10:50,890
‫เราไม่มีการเคลื่อนไหวที่ราบรื่น

132
00:10:50,890 --> 00:10:52,270
‫นั่นเป็นประเด็นหนึ่ง

133
00:10:52,300 --> 00:11:03,750
‫อีกปัญหาหนึ่งคือ ถ้าฉันคลิกแล้วหมุนไปรอบๆ และขึ้นไปที่ขอบ ฉันจะเห็นว่าป้อมปืนของฉันหักไปในทิศทางอื่นเมื่อฉันเลื่อนเคอร์เซอร์ของเมาส์ขึ้น

134
00:11:03,760 --> 00:11:05,730
‫เกิดอะไรขึ้นที่นั่น?

135
00:11:05,740 --> 00:11:06,910
‫มาดูกันดีกว่า

136
00:11:06,910 --> 00:11:10,240
‫เราจะกลับไปที่ VS Code และฉันต้องการนำ debug sphere กลับมา

137
00:11:10,240 --> 00:11:16,240
‫กลับมาที่ Tank ฉันจะไปที่ฟังก์ชันติ๊กก่อนหมุนป้อมปืน และอีกครั้งฉันจะเรียก

138
00:11:16,240 --> 00:11:19,240
‫Draw debug sphere อีกครั้ง

139
00:11:19,450 --> 00:11:26,380
‫ตอนนี้สำหรับโลกที่ฉันกำลังผ่านเข้ามา รับโลกสำหรับจุดศูนย์กลาง ฉันกำลังผ่านจุดกระทบจุดกระทบจุดสำหรับรัศมี

140
00:11:26,380 --> 00:11:38,440
‫ฉันจะใช้ส่วน 25 จุด F ได้ 12 สีสามารถเป็น F สี เส้นสีแดงถาวรอาจเป็นเท็จ และอายุการใช้งานสามารถเป็นค่าลบได้

141
00:11:38,440 --> 00:11:40,480
‫สิ่งเดียวกันกับที่เราทำก่อนหน้านี้

142
00:11:40,690 --> 00:11:42,280
‫ผมจะบันทึกประกาศนี้ไว้

143
00:11:42,280 --> 00:11:50,830
‫ฉันไม่ได้เพิ่มไฟล์ส่วนหัวสำรองไว้ที่นั่น และนั่นเป็นเพราะว่าตัวช่วยดีบั๊กถูกรวมไว้โดยค่าเริ่มต้น ดังนั้นเราจึงไม่ต้องการมันในทางเทคนิค

144
00:11:50,830 --> 00:11:56,740
‫ฉันแค่จะบันทึกการกระโดดกลับไปในโปรแกรมแก้ไข เริ่มต้นการเขียนโค้ดแบบสดแล้วกดเล่น

145
00:11:56,740 --> 00:11:58,600
‫ตอนนี้ฉันมีทรงกลมดีบักของฉันแล้ว

146
00:11:58,600 --> 00:12:07,240
‫ไปให้สุดขอบโลก และฉันจะเลื่อนเคอร์เซอร์ของเมาส์ไปที่จุดที่มันตกลงสู่ก้นบึ้ง

147
00:12:07,240 --> 00:12:10,330
‫และนั่นคือสิ่งที่เรามีปัญหา

148
00:12:10,330 --> 00:12:18,730
‫คุณเห็นไหม เราไม่มีผลการตีภายใต้เคอร์เซอร์เมื่อเคอร์เซอร์ของเราเลื่อนขึ้นที่นั่นเพราะไม่มีอะไรให้เราได้ผลลัพธ์จากการโจมตี

149
00:12:18,730 --> 00:12:22,120
‫ดังนั้นจึงไม่มีการกำหนดจุดกระทบของเรา

150
00:12:22,120 --> 00:12:25,570
‫สิ่งที่เราต้องมีก็คือบางอย่างสำหรับการติดตามเส้นนั้น

151
00:12:25,600 --> 00:12:28,810
‫ตอนนี้ Unreal Engine มีเครื่องมือมากมายที่เราสามารถใช้ได้

152
00:12:28,810 --> 00:12:38,380
‫สิ่งที่ฉันจะทำคือคลิกดรอปดาวน์บนนี้ แล้วเปิดแผงตัวแสดงสถานที่ของฉัน และเลือกไอคอนนี้ที่ระบุว่าไดรฟ์ข้อมูลและได้รับบล็อกวอลลุ่ม

153
00:12:38,380 --> 00:12:39,820
‫นี่คือการปิดกั้นระดับเสียง

154
00:12:39,820 --> 00:12:41,710
‫ฉันจะลากมันเข้าไป

155
00:12:41,740 --> 00:12:44,020
‫ตอนนี้ฉันมีบล็อควอลลุ่มนี้แล้ว

156
00:12:44,110 --> 00:12:48,190
‫ตามค่าเริ่มต้น การบล็อกวอลลุมควรจะมองไม่เห็น

157
00:12:48,190 --> 00:12:54,130
‫ถ้าฉันไปที่แผงรายละเอียดสำหรับสิ่งนี้และเลื่อนลงไปที่การชนกัน ฉันเห็นว่ามันคือ

158
00:12:54,130 --> 00:13:00,940
‫Collision Presets is Invisible Wall ซึ่งดูเหมือนว่าจะแนะนำว่าควรบล็อกเกือบทุกอย่าง

159
00:13:00,940 --> 00:13:08,680
‫สิ่งเดียวที่ไม่ได้ปิดกั้นคือช่องทางการมองเห็นและการติดตามสายของเราเกิดขึ้นกับการติดตามช่องทางการมองเห็น

160
00:13:08,680 --> 00:13:13,630
‫สิ่งใดก็ตามในโลกของเราที่ปิดกั้นช่องทางการมองเห็นจะถูกติดตามโดยการติดตามสายของเรา

161
00:13:13,630 --> 00:13:16,540
‫แต่ปริมาณเฉพาะนี้จะไม่

162
00:13:16,540 --> 00:13:17,860
‫มันควรจะมองไม่เห็น

163
00:13:17,860 --> 00:13:22,690
‫เราสามารถไปที่ค่าที่ตั้งไว้ของการชนกัน เปิดเมนูแบบเลื่อนลงและเลือกกำหนดเอง

164
00:13:22,720 --> 00:13:28,300
‫สิ่งนี้จะทำให้เราสามารถเปลี่ยนแปลงสิ่งนั้นได้ เพื่อให้สามารถตั้งค่าการตอบสนองการชนไปยังช่องทางการมองเห็นได้

165
00:13:28,300 --> 00:13:29,170
‫มันเป็นบล็อก

166
00:13:29,170 --> 00:13:40,180
‫ดังนั้นตอนนี้ฉันมีวอลลุ่มล่องหน แต่มันถูกตั้งค่าให้บล็อกช่องการมองเห็น ซึ่งหมายความว่าการตามรอยเส้นที่ติดตามกับช่องทางการมองเห็นอย่างของเรากำลังจะชนมัน

167
00:13:40,180 --> 00:13:45,580
‫สิ่งที่ฉันทำได้คือนำวอลลุ่มการบล็อคนี้มาขยายขนาด

168
00:13:45,580 --> 00:13:47,800
‫ฉันจะวางมันไว้เหนือกำแพง

169
00:13:47,800 --> 00:13:55,900
‫อันที่จริง ฉันสามารถวางมันไว้ตรงนี้ที่ขอบกำแพง และฉันจะลดมันลงมาเล็กน้อยเพื่อให้มันทับซ้อนกันกับผนัง

170
00:13:55,900 --> 00:14:01,930
‫และด้วยวิธีนั้น เรามีบาเรียที่มองไม่เห็นตรงนี้ และฉันจะขยายมันให้ใหญ่ขึ้นในทิศทาง

171
00:14:01,930 --> 00:14:03,550
‫Y เช่นกัน

172
00:14:03,550 --> 00:14:09,880
‫ผมจะจัดวางให้ใหญ่และสวยงาม แล้ววางมันไว้ตรงกลางตรงนี้ และเติมช่องว่างภายในเล็กน้อย

173
00:14:09,880 --> 00:14:14,050
‫และผมจะขยายมันให้ใหญ่ขึ้นในทิศทาง Z ด้วย

174
00:14:14,050 --> 00:14:18,460
‫ตอนนี้มันดีและใหญ่แล้ว และเส้นของเราน่าจะชนมัน

175
00:14:18,460 --> 00:14:20,080
‫ลองทดสอบทฤษฎีนั้นกัน

176
00:14:20,110 --> 00:14:23,170
‫คลิกที่วิวพอร์ตแล้วขึ้นไปที่กำแพงกัน

177
00:14:23,170 --> 00:14:34,240
‫และแน่นอนว่า ฉันกำลังบล็อกวอลลุ่มนั้นด้วยการติดตามเส้นของฉัน และฉันก็ไม่มีปัญหาที่ป้อมปืนของฉันจะล็อคเพื่อดูตำแหน่งที่ไม่ได้กำหนดไว้

178
00:14:34,240 --> 00:14:40,810
‫มันอาจจะมองไปที่จุดกำเนิดของโลกเพราะเวกเตอร์จุดกระทบนั้นเป็นศูนย์ทั้งหมด

179
00:14:40,810 --> 00:14:43,660
‫ตอนนี้ถ้าฉันขึ้นไปบนกำแพงนี้ ฉันมีปัญหาเดียวกัน

180
00:14:43,660 --> 00:14:46,270
‫ดังนั้นเราจึงต้องการบล็อควอลลุมเหล่านี้

181
00:14:46,600 --> 00:14:48,950
‫ทั่วปริมณฑลของระดับของเรา

182
00:14:48,970 --> 00:14:50,590
‫ตอนนี้มันค่อนข้างง่าย

183
00:14:50,590 --> 00:14:54,820
‫ทั้งหมดที่ฉันต้องทำคือทำซ้ำวอลลุ่มการบล็อกนี้

184
00:14:54,820 --> 00:14:59,290
‫ตอนนี้ฉันเปลี่ยนจากมุมมองเปอร์สเปคทีฟเป็นมุมมองออร์โธกราฟิกด้านบนได้แล้ว

185
00:14:59,290 --> 00:15:06,070
‫ดังนั้นฉันจะเลือกด้านบนและเลื่อนเมาส์ออกไปแล้วกด alt และทำสำเนากำแพงนี้แล้ววางอันหนึ่งไว้ตรงนี้

186
00:15:06,070 --> 00:15:11,620
‫และฉันสามารถกด E เพื่อเข้าสู่โหมดหมุนได้

187
00:15:11,620 --> 00:15:14,740
‫ผมจะกด Alt ค้างไว้แล้วหมุนไป 90 องศา

188
00:15:14,740 --> 00:15:21,010
‫นั่นจะให้สำเนากับฉัน จากนั้นฉันจะกด double u และทำให้โหมดการแปลของฉันทำงาน และฉันจะย้ายมันขึ้นไปที่ด้านนี้และกด

189
00:15:21,010 --> 00:15:26,920
‫Alt ค้างไว้แล้วลากสำเนาลงไปที่ด้านนั้น

190
00:15:26,920 --> 00:15:28,720
‫ตอนนี้เรามีสี่กำแพง

191
00:15:28,720 --> 00:15:34,990
‫ตอนนี้ฉันสามารถเปลี่ยนจากมุมมองด้านบนกลับไปเป็นเปอร์สเป็คทีฟและกดเล่น และตอนนี้ฉันสามารถขึ้นไปบนกำแพงใดก็ได้

192
00:15:34,990 --> 00:15:40,240
‫และไม่ว่าฉันจะปิดกำแพงไหน มันจึงดูดี

193
00:15:40,240 --> 00:15:42,340
‫เพื่อดูแลหนึ่งในปัญหาของเรา

194
00:15:42,340 --> 00:15:43,720
‫แต่อีกอันหนึ่งนี้ล่ะ?

195
00:15:43,720 --> 00:15:49,360
‫หากเราเลื่อนเมาส์ไปใกล้ๆ กับรถถัง เราก็ยังคงมีพฤติกรรมแบบนี้อยู่เป็นระยะๆ

196
00:15:49,360 --> 00:15:51,880
‫ฉันก็เลยอยากดูแลมันเหมือนกัน

197
00:15:51,880 --> 00:15:56,770
‫ทีนี้ วิธีที่ฉันจัดการได้คือ สอดแทรกการหมุนนั้น

198
00:15:56,770 --> 00:16:08,740
‫ดังนั้น แทนที่จะตั้งค่าการหมุนนี้โดยตรง เราสามารถใช้ฟังก์ชันการแก้ไขซึ่งจะย้ายการหมุนนั้นไปยังเป้าหมายที่เราจัดเตรียมไว้อย่างราบรื่น

199
00:16:08,740 --> 00:16:10,270
‫เรามาดูกันว่ามันทำงานอย่างไร

200
00:16:10,270 --> 00:16:15,970
‫ตอนนี้ ฉันต้องการให้การแก้ไขนี้อยู่ในฟังก์ชันการหมุนของป้อมปืน เพื่อให้เราสามารถกลับไปที่ฐานจำนำลงเพื่อหมุนป้อมปืน

201
00:16:15,970 --> 00:16:28,240
‫และแทนที่จะตั้งค่าการหมุนของโลกเพื่อให้ป้อมปืนดูการหมุน เราสามารถตั้งค่าให้เท่ากับ ค่าที่ส่งคืนโดยฟังก์ชันการแก้ไข

202
00:16:28,240 --> 00:16:34,720
‫ผมจะลบ ดูที่การหมุน แล้วเราจะเรียกฟังก์ชันในไลบรารีคณิตศาสตร์

203
00:16:34,720 --> 00:16:38,590
‫F ที่เรียกว่า R inter two แทน

204
00:16:39,100 --> 00:16:44,530
‫ตอนนี้ในสองของเราได้รับการออกแบบมาเพื่อจัดการกับการแก้ไขสำหรับโรเตเตอร์

205
00:16:44,530 --> 00:16:49,720
‫ตอนนี้พารามิเตอร์อินพุตแรกคือการอ้างอิงตัวหมุน const F ที่เรียกว่ากระแส

206
00:16:49,720 --> 00:16:53,650
‫นั่นคือมูลค่าปัจจุบันของสิ่งที่เราพยายามจะเปลี่ยน

207
00:16:53,650 --> 00:16:59,560
‫สิ่งที่เราพยายามจะเปลี่ยนคือการหมุนของป้อมปืน และเราได้จากตาข่ายของป้อมปืน

208
00:16:59,560 --> 00:17:05,920
‫เราจะบอกว่า turret mesh และฟังก์ชันที่เราต้องการใช้คือการหมุนส่วนประกอบ

209
00:17:05,920 --> 00:17:10,420
‫ดังนั้นมันจึงเหมือนกับรับตำแหน่งส่วนประกอบเท่านั้นที่จะได้รับการหมุน

210
00:17:10,420 --> 00:17:14,200
‫ตอนนี้อินพุตถัดไปคือตัวหมุน F ที่เรียกว่า Target

211
00:17:14,200 --> 00:17:15,310
‫นั่นคือคุณค่า

212
00:17:15,310 --> 00:17:21,430
‫เราต้องการให้การหมุนของตาข่ายป้อมปืนตีความว่าเข้าใกล้อย่างราบรื่น

213
00:17:21,430 --> 00:17:23,890
‫นั่นคือการดูการหมุนของเรา

214
00:17:23,890 --> 00:17:26,620
‫ผมเลยจะบอกว่าดูที่การหมุน

215
00:17:26,620 --> 00:17:28,630
‫อินพุตถัดไปคือเวลาเดลต้า

216
00:17:28,630 --> 00:17:30,640
‫เราจึงทราบถึงความสำคัญของเวลาเดลต้า

217
00:17:30,640 --> 00:17:37,030
‫หากเรากำลังเคลื่อนย้ายสิ่งของหรือสิ่งของที่หมุนอยู่ เราต้องการให้การเคลื่อนไหวนั้นไม่ขึ้นกับอัตราเฟรม

218
00:17:37,030 --> 00:17:39,700
‫ดังนั้นเราจึงสามารถหาเวลาเดลต้าได้

219
00:17:39,700 --> 00:17:46,210
‫ฉันสามารถรวมสถิตการเล่นเกมและถ้าคุณมีหน่วยความจำที่ดี คุณจะจำได้ว่ารวมคือ

220
00:17:46,210 --> 00:17:49,150
‫kismet สแลชเพลย์สเตติก

221
00:17:49,150 --> 00:18:01,150
‫ดังนั้นฉันจะเอาสถิติการเล่นเกมมาไว้ที่นี่ เพื่อที่ฉันจะได้เข้าถึงฟังก์ชันสแตติก รับวินาทีเดลต้าโลก และจำไว้ว่าสิ่งนี้ต้องใช้ออบเจกต์บริบทโลก

222
00:18:01,150 --> 00:18:04,030
‫ดังนั้นฉันจะส่งสิ่งนี้เข้าไป

223
00:18:04,030 --> 00:18:06,340
‫และสุดท้าย เราต้องการความเร็วภายใน

224
00:18:06,340 --> 00:18:12,280
‫ยิ่งค่าความเร็วภายในสูงเท่าไหร่ เราจะยิ่งสอดแทรกไปยังเป้าหมายเร็วขึ้นเท่านั้น

225
00:18:12,280 --> 00:18:18,550
‫ดังนั้นหากผมตั้งค่านี้เป็นค่าว่า 5 F แล้วเราจะสอดแทรกค่อนข้างช้า

226
00:18:18,580 --> 00:18:20,470
‫เรามาดูกันว่าตอนนี้มีลักษณะอย่างไร

227
00:18:20,470 --> 00:18:25,030
‫ทั้งหมดนี้อยู่ในบรรทัดเดียวและวิ่งออกจากหน้าจอ

228
00:18:25,030 --> 00:18:32,440
‫สิ่งที่ฉันจะทำคือวางอินพุตเพื่อตั้งค่าการหมุนของโลกตามบรรทัดของมันเองแบบนี้

229
00:18:32,440 --> 00:18:34,060
‫แค่นั้นเอง

230
00:18:34,060 --> 00:18:39,820
‫จากนั้นล่ามของเราซึ่งมีพารามิเตอร์อินพุตสี่ตัวนี้ก็วิ่งออกจากหน้าจอเช่นกัน

231
00:18:39,820 --> 00:18:43,270
‫ผมจะจัดพวกมันให้อยู่ในแนวเดียวกัน

232
00:18:43,270 --> 00:18:49,420
‫ด้วยวิธีนี้เราจะสามารถเห็นอินพุตทั้งหมดโดยไม่ต้องเลื่อนออกจากหน้าจอแบบนั้น

233
00:18:49,420 --> 00:18:49,840
‫ไม่เป็นไร.

234
00:18:49,840 --> 00:18:54,220
‫ฉันจะดำเนินการต่อและบันทึกสิ่งนั้นและเริ่มต้นการเข้ารหัสแบบสด

235
00:18:54,220 --> 00:19:01,480
‫และตอนนี้ถ้าฉันกดเล่นและเลื่อนเมาส์ สังเกตว่าต้องใช้เวลาสักครู่กว่าที่การหมุนนั้นจะเกิดขึ้น

236
00:19:01,480 --> 00:19:06,430
‫นั่นเป็นเพราะว่าเรากำลังสอดแทรกไปยังการหมุนเป้าหมายนั้นอย่างราบรื่น

237
00:19:06,430 --> 00:19:07,780
‫ตอนนี้มันเยี่ยมมาก

238
00:19:07,780 --> 00:19:09,340
‫นั่นคือสิ่งที่ฉันต้องการ

239
00:19:09,340 --> 00:19:14,950
‫ไม่ว่าฉันจะขยับเมาส์อย่างไร ฉันก็ไม่มีวันได้รับการเคลื่อนไหวแบบกระตุกๆ กระปรี้กระเปร่า

240
00:19:15,040 --> 00:19:20,170
‫ตอนนี้ ห้าเป็นความเร็วอินเทอร์เน็ตที่ช้ามาก แต่เราสามารถเปลี่ยนสิ่งนั้นได้

241
00:19:20,170 --> 00:19:21,820
‫เราสามารถทำให้มันเร็วขึ้นเล็กน้อย

242
00:19:21,820 --> 00:19:30,040
‫ฉันจะตั้งค่านี้เป็น 25 ดูว่ามันจะออกมาเป็นอย่างไร และฉันจะให้คุณตัดสินใจเลือกมูลค่าที่คุณชอบสำหรับเกมของคุณ

243
00:19:30,040 --> 00:19:34,450
‫อีกครั้งหนึ่ง เริ่มต้นการเขียนโค้ดแบบสดและกดเล่น

244
00:19:34,510 --> 00:19:39,010
‫ตอนนี้ฉันมีการแก้ไขที่ค่อนข้างเร็ว แต่ก็ไม่หัก

245
00:19:39,010 --> 00:19:42,910
‫มันยังเร็วอยู่ แต่ก็ไม่ใช่ทันทีทันใด

246
00:19:42,910 --> 00:19:46,360
‫ตราบใดที่เราไม่ทำอะไรแบบนี้ เราก็ไม่เข้าใจ

247
00:19:46,540 --> 00:19:47,860
‫พฤติกรรมบ้าๆบอๆ

248
00:19:47,860 --> 00:19:53,500
‫และแน่นอน ถ้าคุณต้องการให้การหมุนช้าลง คุณรู้วิธีการทำในตอนนี้ และเราเสร็จสิ้นการวาด

249
00:19:53,500 --> 00:19:56,220
‫debug sphere ดังนั้นฉันจะลบมันออกไป

250
00:19:56,230 --> 00:19:56,650
‫ตกลง.

251
00:19:56,650 --> 00:20:02,920
‫โดยสรุปแล้ว เราได้ตั้งค่าการหมุนของป้อมปืนและเรากำลังพิจารณาเป้าหมาย ซึ่งเป็นเวกเตอร์

252
00:20:02,920 --> 00:20:05,800
‫F ที่สัมพันธ์กับจุดหนึ่งในโลก

253
00:20:05,800 --> 00:20:08,080
‫ตอนนี้เราแค่ใช้ผลการสืบค้นกลับ

254
00:20:08,110 --> 00:20:15,880
‫ตอนนี้เราใส่ฟังก์ชันนี้ในคลาสปิงปองฐานและทำให้มีการป้องกัน ซึ่งหมายความว่าเราสามารถสืบทอดฟังก์ชันในคลาสรถถังได้

255
00:20:15,880 --> 00:20:24,610
‫และเมื่อเราพร้อมที่จะสร้างชั้นหอคอยตามฐานแล้ว ชั้นหอคอยนั้นจะสืบทอดฟังก์ชันป้อมปืนหมุนนี้และเราสามารถนำกลับมาใช้ใหม่ได้

256
00:20:24,610 --> 00:20:26,050
‫สิ่งที่เราต้องทำคือผ่าน

257
00:20:26,050 --> 00:20:32,380
‫ในรูปลักษณ์ใหม่ที่ Target เราจะพยายามสร้างคลาสหอคอยที่ได้มาจากฐาน - ในการบรรยายที่จะมาถึง

258
00:20:32,380 --> 00:20:33,250
‫เจอกันเร็วๆนี้ครับ

