﻿1
00:00:04,170 --> 00:00:04,650
‫เฮ้.

2
00:00:04,650 --> 00:00:05,580
‫ยินดีต้อนรับกลับ.

3
00:00:05,610 --> 00:00:09,390
‫ตอนนี้เรารู้แล้วว่าเราต้องได้รับผลการตีภายใต้เคอร์เซอร์

4
00:00:09,420 --> 00:00:14,070
‫เราจะพูดถึงวิธีการทำงานและความหมายในวิดีโอนี้อีกเล็กน้อย

5
00:00:14,250 --> 00:00:22,090
‫เป้าหมายของเราคือเพื่อให้ได้ผลลัพธ์ของการโจมตีภายใต้เคอร์เซอร์และแสดงตำแหน่งนี้ และเราสามารถทำได้โดยการวาดทรงกลมดีบัก

6
00:00:22,110 --> 00:00:24,150
‫เราจะได้เรียนรู้วิธีการทำเช่นนั้นเช่นกัน

7
00:00:24,180 --> 00:00:27,300
‫มาพูดถึงสิ่งที่เรียกว่าผลการตีกัน

8
00:00:27,600 --> 00:00:30,550
‫ในเกมมักจะต้องการทำอะไรแบบนี้

9
00:00:30,570 --> 00:00:32,520
‫เราจะมีจุดในอวกาศ

10
00:00:32,550 --> 00:00:39,210
‫เราจะเรียกจุดนี้ว่าจุดเริ่มต้น และมีเวกเตอร์ประเภท F แล้วเราจะมีตำแหน่งสิ้นสุด

11
00:00:39,240 --> 00:00:43,260
‫นี่จะเป็นจุดในช่องว่างของเวกเตอร์ประเภท F ด้วย

12
00:00:43,410 --> 00:00:48,720
‫สมมติว่าเราต้องการวาดเส้นที่มองไม่เห็นจากจุดเริ่มต้นไปยังจุดสิ้นสุด

13
00:00:48,750 --> 00:00:55,800
‫และในขณะที่เราวาดเส้นนี้ เราต้องการดูว่ามีวัตถุใดๆ อยู่ระหว่างตำแหน่งเริ่มต้นและจุดสิ้นสุดหรือไม่

14
00:00:56,280 --> 00:01:01,470
‫ทีนี้ ถ้ามี เส้นนี้ที่เราวาดในอวกาศจะชนวัตถุนั้น

15
00:01:01,470 --> 00:01:05,400
‫บนพื้นผิว เมื่อสิ่งนี้เกิดขึ้น เราเรียกสิ่งนี้ว่าเหตุการณ์ที่เกิดขึ้น

16
00:01:05,430 --> 00:01:10,820
‫เมื่อเราวาดเส้นที่มองไม่เห็นแบบนี้ เรียกว่าการลากเส้น

17
00:01:10,830 --> 00:01:14,520
‫และเมื่อเราตีบางสิ่ง เราบอกว่า เรามีการตีตามรอย

18
00:01:14,550 --> 00:01:21,240
‫ตอนนี้ หากเราพบบางสิ่งและได้รับเหตุการณ์ Hit การสืบค้นกลับจะเก็บข้อมูลในโครงสร้างที่เรียกว่าผลลัพธ์ของ

19
00:01:21,240 --> 00:01:22,820
‫Hit

20
00:01:22,830 --> 00:01:24,700
‫ประเภทของมันคือผลการตี F

21
00:01:24,720 --> 00:01:31,560
‫ตอนนี้ โครงสร้างผลลัพธ์ของ Hit F มีตัวแปรที่เก็บข้อมูลเกี่ยวกับเหตุการณ์ Hit

22
00:01:31,560 --> 00:01:38,680
‫รวมถึงตำแหน่ง Hit เป็นเวกเตอร์ f ในอวกาศและนักแสดงที่เราตี ท่ามกลางข้อมูลอื่นๆ

23
00:01:38,700 --> 00:01:44,100
‫ตอนนี้ เมื่อเราดำเนินการติดตามเส้น เราทำโดยการระบุช่องทางการชนกัน

24
00:01:44,130 --> 00:01:48,390
‫โดยปกติเราจะเลือกช่องสัญญาณที่เรียกว่าการมองเห็น

25
00:01:48,510 --> 00:01:56,070
‫มี enum ที่เรียกว่า E Collision Channel และใน enum นี้มีค่าคงที่ enum ที่เรียกว่าการมองเห็น

26
00:01:56,070 --> 00:01:57,030
‫XY

27
00:01:57,180 --> 00:02:01,470
‫นี่เป็นหนึ่งในพารามิเตอร์ที่เราระบุเมื่อดำเนินการติดตามบรรทัด

28
00:02:01,740 --> 00:02:10,980
‫ตอนนี้ หากเราระบุช่องทางการมองเห็น นั่นหมายความว่าวัตถุที่ถูกตั้งค่าให้ปิดกั้นช่องทางการมองเห็นในการตั้งค่าการชนกันของพวกมันจะบันทึกเหตุการณ์การชน

29
00:02:11,130 --> 00:02:16,350
‫ออบเจ็กต์ใดๆ ที่ไม่ได้ตั้งค่าให้ปิดกั้นช่องทางการมองเห็นจะไม่สร้างเหตุการณ์ Hit

30
00:02:16,380 --> 00:02:19,350
‫ตอนนี้เราต้องการผลลัพธ์การติดตามใต้เคอร์เซอร์

31
00:02:19,590 --> 00:02:23,040
‫ลองนึกภาพว่าเรามีหน้าจออยู่ที่นี่ และนี่คือเคอร์เซอร์ของเราในตอนนี้

32
00:02:23,040 --> 00:02:29,730
‫ที่ส่วนปลายของเคอร์เซอร์ เรามีจุดบนหน้าจอเมื่อเราใช้ฟังก์ชันเพื่อรับผลการตีภายใต้เคอร์เซอร์

33
00:02:29,760 --> 00:02:35,040
‫สิ่งที่เกิดขึ้นคือเรามีกล้องของเราและอาจเห็นวัตถุบางอย่างในโลกเช่นพื้นที่นี่

34
00:02:35,040 --> 00:02:40,950
‫และเรากำลังดำเนินการตามรอยเส้นจากกล้องที่จุดบนหน้าจอที่สัมพันธ์กับตำแหน่งเคอร์เซอร์ของเรา

35
00:02:40,950 --> 00:02:45,090
‫และเรากำลังถ่ายภาพเส้นตามรอยออกไปสู่โลก

36
00:02:45,090 --> 00:02:51,570
‫และหากเราโจมตีสิ่งใดสิ่งหนึ่ง เราจะสร้างเหตุการณ์ของ Hit และจัดเก็บข้อมูลในโครงสร้างผลลัพธ์ของ Hit

37
00:02:52,080 --> 00:02:54,470
‫ลองหาวิธีที่เราสามารถทำได้

38
00:02:54,480 --> 00:03:03,240
‫ฉันอยู่ที่นี่ในรถถัง CP และสิ่งที่ฉันต้องการทำคือรับผลการตีภายใต้เคอร์เซอร์ทุกเฟรม ซึ่งหมายความว่าเราต้องการฟังก์ชันติ๊ก

39
00:03:03,240 --> 00:03:08,160
‫อีกครั้ง เราจะกลับไปที่ฐานและค้นหาฟังก์ชันติ๊กที่นี่

40
00:03:08,190 --> 00:03:14,100
‫ตอนนี้เราไม่ได้ใช้มันเพื่ออะไรในการจำนำพื้นฐาน ดังนั้นเราจึงสามารถย้ายฟังก์ชันนี้ไปยังคลาสรถถังได้เหมือนกับที่เราทำกับ

41
00:03:14,100 --> 00:03:15,570
‫Begin Play

42
00:03:15,570 --> 00:03:21,600
‫ดังนั้นฉันจะเน้นการประกาศฟังก์ชันพร้อมกับความคิดเห็นและคัดลอก

43
00:03:21,600 --> 00:03:28,590
‫และหลังจากนั้น ฉันจะลบส่วนนี้ทั้งหมด สาธารณะ และทั้งหมด จากนั้นฉันจะกลับไปที่ Tank

44
00:03:28,590 --> 00:03:33,150
‫H และในส่วนสาธารณะ ฉันจะวางการประกาศฟังก์ชันติ๊ก

45
00:03:33,150 --> 00:03:37,620
‫ตอนนี้เราไม่ได้ใช้มันในการจำนำฐาน ดังนั้นฉันจะลบฟังก์ชันติ๊กออกจากฐานรอง

46
00:03:37,680 --> 00:03:40,710
‫CP ตอนนี้มันหายไปจากฐานจำนำ

47
00:03:41,340 --> 00:03:47,880
‫ตอนนี้เราได้ประกาศเจตนาไว้ที่นี่แล้ว แต่เราต้องกำหนดฟังก์ชันในถังด้วย

48
00:03:48,060 --> 00:03:54,180
‫CP ฉันจะทำมันที่นี่ในถัง DHCP ใต้การตั้งค่าส่วนประกอบอินพุตของผู้เล่น

49
00:03:54,180 --> 00:03:56,400
‫เราจะบอกว่า ขีดเป็นโมฆะ

50
00:03:57,340 --> 00:03:59,620
‫ต้องใช้ทุ่นลอยที่เรียกว่าเดลต้าไทม์

51
00:04:00,940 --> 00:04:02,350
‫และมีร่างกายของเรา

52
00:04:02,380 --> 00:04:09,180
‫อีกครั้ง เราต้องการถังก่อนฟังก์ชันติ๊ก พร้อมกับตัวดำเนินการความละเอียดขอบเขต

53
00:04:09,190 --> 00:04:14,530
‫และเรายังต้องเรียกซูเปอร์ติ๊กและผ่านในเวลาเดลต้า

54
00:04:16,450 --> 00:04:19,240
‫ดังนั้นเราจึงมีเครื่องหมายในคลาสรถถัง

55
00:04:19,450 --> 00:04:23,560
‫สิ่งที่เราต้องการทำคือรับผลการตีภายใต้เคอร์เซอร์

56
00:04:23,710 --> 00:04:25,450
‫นี่คือวิธีที่เราทำ

57
00:04:25,480 --> 00:04:31,260
‫ฟังก์ชั่นที่เราจะใช้นั้นมีอยู่บนตัวควบคุมของผู้เล่นที่เรียกว่า get hit result ภายใต้เคอร์เซอร์

58
00:04:31,270 --> 00:04:32,800
‫เรากำลังพูดถึงเรื่องนี้

59
00:04:32,980 --> 00:04:34,530
‫นี่คือไวยากรณ์

60
00:04:34,540 --> 00:04:36,160
‫มันใช้ช่องทางการติดตาม

61
00:04:36,190 --> 00:04:40,660
‫จำไว้ว่าเราต้องระบุช่องทางการติดตามและเราจะใช้การมองเห็น

62
00:04:40,840 --> 00:04:43,690
‫ตอนนี้เรามีพารามิเตอร์อินพุตเพิ่มเติมสองตัว

63
00:04:43,720 --> 00:04:46,720
‫อย่างแรกคือบูลที่เรียกว่า B trace complex

64
00:04:46,750 --> 00:04:49,120
‫เราจะพูดถึงความหมายในอีกสักครู่

65
00:04:49,210 --> 00:04:52,270
‫และพารามิเตอร์อินพุตที่สามคือผลลัพธ์การตี F

66
00:04:52,390 --> 00:04:57,820
‫ตอนนี้ฉันจะคลิกที่ผลลัพธ์การตี F เพื่อดูประเภทนี้ในเอกสารประกอบ

67
00:04:58,480 --> 00:05:01,960
‫และถ้าฉันเลื่อนลงมา เราจะเห็นตัวแปรบางตัว

68
00:05:01,990 --> 00:05:06,670
‫หนึ่งในนั้นเรียกว่านักแสดงและมีคำอธิบายว่า Actor Hit by the Trace

69
00:05:06,700 --> 00:05:13,510
‫นอกจากนี้เรายังมีการโจมตีการบล็อก B ซึ่งระบุว่าการชนนี้เป็นผลมาจากการชนกันของการบล็อกหรือไม่

70
00:05:13,750 --> 00:05:17,770
‫ท่ามกลางตัวแปรอื่นๆ เรามีสิ่งต่างๆ เช่น จุดกระทบ

71
00:05:18,010 --> 00:05:22,000
‫นี่คือสถานที่ในอวกาศที่เราชนอะไรบางอย่างจริงๆ

72
00:05:22,600 --> 00:05:26,150
‫ทำไมเราไม่ลองเรียกใช้ฟังก์ชันนี้ดูล่ะ

73
00:05:26,170 --> 00:05:32,170
‫อันดับแรก เราต้องการผู้เล่น ผู้ควบคุม และด้วยสิ่งที่เราทำที่นี่และเริ่มเล่น เรามีผู้เล่น ผู้ควบคุม

74
00:05:32,170 --> 00:05:33,370
‫ผู้อ้างอิง

75
00:05:33,400 --> 00:05:38,770
‫ตอนนี้สิ่งแรกที่เราควรทำคือตรวจสอบว่าผู้อ้างอิงตัวควบคุมผู้เล่นนั้นถูกต้องหรือไม่

76
00:05:39,100 --> 00:05:42,140
‫เราสามารถส่งตัวชี้ไปยังคำสั่ง if ได้เสมอ

77
00:05:42,160 --> 00:05:47,270
‫มันจะคืนค่าเป็น จริง หากตัวชี้เองไม่ใช่ตัวชี้ว่าง

78
00:05:47,290 --> 00:05:52,930
‫หากเป็นตัวชี้ค่าว่าง มันจะคืนค่าเท็จในคำสั่ง if และเราจะไม่มีวันไปถึงด้านในของคำสั่ง

79
00:05:52,930 --> 00:05:53,920
‫if

80
00:05:54,070 --> 00:05:59,740
‫เป็นความคิดที่ดีเสมอที่จะตรวจสอบพอยน์เตอร์ของเราและตรวจสอบให้แน่ใจว่าไม่มีค่าว่างก่อนที่เราจะใช้งาน

81
00:06:00,010 --> 00:06:04,960
‫ตอนนี้เรากำลังจะรับผู้เล่น ผู้อ้างอิงคอนโทรลเลอร์ และเราจะใช้ตัวดำเนินการลูกศรเพื่อเรียกใช้ฟังก์ชัน

82
00:06:04,960 --> 00:06:08,950
‫รับผลการตีภายใต้เคอร์เซอร์

83
00:06:09,100 --> 00:06:12,670
‫ตอนนี้เราจะเห็นป๊อปอัปว่าเรามีพารามิเตอร์อินพุตสามตัว

84
00:06:12,850 --> 00:06:14,650
‫ที่แรกก็คือ Trace Channel

85
00:06:14,950 --> 00:06:22,030
‫เราจะใช้ EA Collision Channel และหากเราพิมพ์เครื่องหมายทวิภาคสองตัว เราก็จะได้ดรอปดาวน์ที่แสดงค่าคงที่

86
00:06:22,030 --> 00:06:26,350
‫enum ที่แตกต่างกันทั้งหมดใน EA Collision Channel enum

87
00:06:26,530 --> 00:06:35,230
‫เราต้องการใช้การมองเห็น ดังนั้นเราจะพิมพ์การมองเห็น XY เพื่อระบุว่าเรากำลังใช้ช่องทางการมองเห็น

88
00:06:35,440 --> 00:06:41,470
‫ตอนนี้พารามิเตอร์ถัดไปเรียกว่า B Trace Complex และเราจะส่งต่อค่าเท็จในสิ่งนี้

89
00:06:41,500 --> 00:06:44,590
‫ตอนนี้เราจะหารือกันในอีกไม่กี่นาทีว่าสิ่งนี้หมายความว่าอย่างไร

90
00:06:44,590 --> 00:06:46,900
‫แต่สำหรับตอนนี้เราจะใช้เท็จ

91
00:06:47,110 --> 00:06:50,300
‫สำหรับพารามิเตอร์ที่สาม เราต้องการผลลัพธ์ของ Hit

92
00:06:50,320 --> 00:06:53,140
‫นี่คือโครงสร้างของผลลัพธ์การตีประเภท F

93
00:06:53,170 --> 00:07:02,740
‫ตอนนี้ หากคุณวางเมาส์เหนือสิ่งนี้ คุณจะเห็นว่าผลลัพธ์การตี F ถูกส่งผ่านเป็นข้อมูลอ้างอิงตามที่ระบุโดยโอเปอเรเตอร์อ้างอิงที่ดูเหมือนเครื่องหมายและ

94
00:07:02,890 --> 00:07:09,730
‫โดยปกติแล้ว เมื่อคุณส่งบางสิ่งเข้ามาเพื่อเป็นข้อมูลอ้างอิง ก็จะเป็นการอ้างอิงต้นทุน ซึ่งหมายความว่าฟังก์ชันจะไม่สามารถเปลี่ยนแปลงได้

95
00:07:09,730 --> 00:07:13,870
‫แต่ในที่นี้ เรากำลังส่งผ่านผลการตี F เป็นข้อมูลอ้างอิงที่ไม่ใช่ const

96
00:07:14,110 --> 00:07:20,120
‫นี่เป็นคำแนะนำโดยทั่วไปว่าฟังก์ชันได้รับการออกแบบมาเพื่อเปลี่ยนพารามิเตอร์อินพุตนี้โดยตรง

97
00:07:20,140 --> 00:07:27,730
‫สิ่งที่ได้รับผลการตีภายใต้เคอร์เซอร์คือการกรอกตัวแปรเหล่านั้นในผลลัพธ์ของ Hit ด้วยข้อมูลเกี่ยวกับผลลัพธ์ของ

98
00:07:27,730 --> 00:07:29,260
‫Hit

99
00:07:29,290 --> 00:07:32,710
‫ซึ่งหมายความว่าเราต้องผ่านหนึ่งในผลลัพธ์ของ f hit เหล่านี้

100
00:07:32,740 --> 00:07:37,540
‫เราจะสร้างตัวแปรโลคัลที่นี่ใน if check ของผลการตีประเภท F

101
00:07:38,380 --> 00:07:44,650
‫และเราสามารถเรียกผลลัพธ์ของ Hit นี้และเราสามารถส่งผ่าน N นี้เป็นพารามิเตอร์อินพุตที่สามได้

102
00:07:44,830 --> 00:07:51,180
‫ตอนนี้ หลังจากที่เราเรียกใช้ฟังก์ชันนี้แล้ว ผลลัพธ์ของ Hit นี้จะเต็มไปด้วยข้อมูลเกี่ยวกับการติดตามบรรทัดนี้

103
00:07:51,190 --> 00:08:00,040
‫ตัวอย่างเช่น เราสามารถเข้าถึงผลการตี dot actor เพื่อรับนักแสดงที่ถูก hit หรือ dot impact point เพื่อให้ได้จุดในช่องว่างที่เรามีเหตุการณ์

104
00:08:00,040 --> 00:08:03,430
‫Hit

105
00:08:03,580 --> 00:08:08,470
‫ดังนั้นผลลัพธ์ของ Hit คือสิ่งที่เราจะใช้เพื่อรับข้อมูลเกี่ยวกับการติดตามบรรทัด

106
00:08:08,860 --> 00:08:13,450
‫บ่อยครั้ง เป็นเรื่องดีที่จะเห็นผลลัพธ์ของการติดตามเส้น

107
00:08:13,450 --> 00:08:18,010
‫เราสามารถเห็นภาพผลลัพธ์ของการติดตามเส้นได้อย่างง่ายดายโดยการวาดทรงกลมดีบัก

108
00:08:18,340 --> 00:08:26,380
‫Debug Sphere เป็นรูปร่างง่ายๆ ที่เราวาดในอวกาศ และเหมาะสำหรับการแสดงตำแหน่ง และเราใช้สิ่งเหล่านี้เมื่อทำการดีบัก

109
00:08:26,380 --> 00:08:29,380
‫เราไม่ได้ใช้ debug spheres ในเกม shift

110
00:08:29,410 --> 00:08:32,150
‫มาดูกันว่าเราจะวาด Debug Sphere ได้อย่างไร

111
00:08:32,170 --> 00:08:36,430
‫ต่อไปนี้คือเอกสารประกอบสำหรับฟังก์ชันที่เรียกว่า draw debug sphere

112
00:08:36,430 --> 00:08:38,800
‫มันมีอยู่ในตัวช่วยดีบักการวาด

113
00:08:39,850 --> 00:08:45,160
‫ดังนั้นเราจึงสามารถคัดลอกส่วนหัวนี้และรวมไว้ทุกที่ที่เราต้องการเรียกการดีบักการวาดทรงกลม

114
00:08:45,190 --> 00:08:47,220
‫ตอนนี้ดูพารามิเตอร์อินพุตทั้งหมด

115
00:08:47,230 --> 00:08:52,240
‫ประการแรก มันต้องใช้โลกในลักษณะที่รู้ว่าโลกใดที่จะดึงทรงกลมเข้ามา

116
00:08:52,270 --> 00:08:57,100
‫มันใช้เวกเตอร์ F สำหรับจุดศูนย์กลางของทรงกลมและทุ่นสำหรับรัศมี

117
00:08:57,130 --> 00:09:00,800
‫ต้องใช้ N 32 สำหรับจำนวนเซ็กเมนต์สำหรับทรงกลมนั้น

118
00:09:00,820 --> 00:09:04,810
‫ยิ่งมีเซกเมนต์มาก ยิ่งทรงกลมยิ่งใช้สี F

119
00:09:04,840 --> 00:09:08,350
‫วิธีนี้จะทำให้รู้ว่าควรวาดทรงกลมนี้ด้วยสีใด

120
00:09:08,380 --> 00:09:11,080
‫ต้องการทราบว่าคุณต้องการเส้นถาวรหรือไม่

121
00:09:11,080 --> 00:09:15,220
‫กล่าวอีกนัยหนึ่งบรรทัดควรหายไปทันทีหรือควรคงอยู่?

122
00:09:15,220 --> 00:09:18,760
‫ถ้าพวกมันยังคงอยู่ มันก็ต้องการทราบอายุขัยของทรงกลม

123
00:09:18,760 --> 00:09:20,910
‫เมื่อใดควรหยุดวาดทรงกลม

124
00:09:20,920 --> 00:09:27,880
‫ถ้าคุณไม่วาดเส้นต่อเนื่อง สมมติว่าคุณต้องการวาดมันในกรอบเดียว จากนั้นคุณจะต้องส่งค่าลบเข้ามาตลอดอายุขัย

125
00:09:27,910 --> 00:09:35,110
‫ตอนนี้พารามิเตอร์สองตัวสุดท้ายเป็นทางเลือก ดังนั้นเราจะทำให้มันง่ายโดยพูดถึงพารามิเตอร์เจ็ดตัวแรกเท่านั้น

126
00:09:35,110 --> 00:09:36,520
‫เรามาดูกันว่ามันทำงานอย่างไร

127
00:09:36,730 --> 00:09:42,100
‫ตอนนี้ฉันกำลังจะวาด debug sphere ที่ด้านบนสุด ฉันจะรวมตัวช่วยดีบักการวาดด้วย

128
00:09:42,850 --> 00:09:46,630
‫นั่นคือที่ที่ประกาศฟังก์ชันการดีบักทรงกลมการวาดนี้

129
00:09:46,660 --> 00:09:52,900
‫ตอนนี้ ลงไปเพื่อเริ่มเล่นและเพียงแค่วาดทรงกลมดีบั๊กเพื่อดูว่ามันทำงานอย่างไร

130
00:09:52,900 --> 00:09:58,030
‫ผมจะเรียก draw debug sphere และ

131
00:09:58,110 --> 00:10:00,780
‫พารามิเตอร์อินพุตแรกคือโลกใหม่

132
00:10:01,110 --> 00:10:10,500
‫เราสามารถรับโลกของเราได้ตลอดเวลาโดยเรียก Get World, Get World Returns ตัวชี้โลกใหม่ไปยังโลกปัจจุบันของเรา

133
00:10:10,500 --> 00:10:12,930
‫เพื่อให้เป็นไปตามอินพุตแรก

134
00:10:13,260 --> 00:10:16,420
‫ต่อไป เราต้องการเวกเตอร์ f สำหรับจุดศูนย์กลางของทรงกลม

135
00:10:16,440 --> 00:10:24,130
‫ตอนนี้เรากำลังเรียกสิ่งนี้และเริ่มเล่น เพื่อที่ฉันจะได้เรียกตำแหน่งนักแสดง และนี่จะได้รับตำแหน่งของบ่อเลี้ยงของเรา

136
00:10:24,150 --> 00:10:26,400
‫เนื่องจากเราอยู่ในคลาสรถถัง

137
00:10:26,640 --> 00:10:29,250
‫ตอนนี้ฉันจะยกทรงกลมขึ้นเล็กน้อย

138
00:10:29,250 --> 00:10:40,890
‫ผมจะบวกเวกเตอร์ F ที่มีศูนย์จุด F สำหรับ x ศูนย์จุด F สำหรับ Y และบอกว่า 200 F สำหรับ

139
00:10:40,890 --> 00:10:41,380
‫Z

140
00:10:41,400 --> 00:10:45,120
‫ตอนนี้ฉันจะใส่พารามิเตอร์อินพุตเหล่านี้แต่ละตัวในบรรทัดของตัวเอง

141
00:10:45,120 --> 00:10:48,300
‫ดังนั้นจึงชัดเจนว่าเรากำลังส่งอะไรไปในแต่ละอินพุต

142
00:10:48,330 --> 00:10:55,740
‫ข้อมูลที่ป้อนที่สองจะได้รับนิพจน์นี้ ซึ่งก็คือตำแหน่งของนักแสดง บวกกับเวกเตอร์ที่ชี้ขึ้นด้านบนด้วยความยาว

143
00:10:55,740 --> 00:10:57,230
‫200

144
00:10:57,240 --> 00:11:04,260
‫การเพิ่มเวกเตอร์สองตัวนี้เข้าด้วยกันจะทำให้ตำแหน่งของถังที่ยกขึ้นในแกน Z เพิ่มขึ้น 200

145
00:11:04,260 --> 00:11:04,950
‫หน่วย

146
00:11:04,980 --> 00:11:09,600
‫ทีนี้ พารามิเตอร์อินพุตถัดไป มันจะเป็นรัศมีของทรงกลม

147
00:11:09,870 --> 00:11:16,970
‫ฉันจะเลือก 100 F เพื่อให้เราเห็นว่าทรงกลมดีบักที่มีรัศมี 100 เป็นอย่างไร

148
00:11:16,980 --> 00:11:18,900
‫ถัดไปคือจำนวนเซ็กเมนต์

149
00:11:18,990 --> 00:11:20,470
‫ฉันจะเลือก 12

150
00:11:20,490 --> 00:11:22,130
‫เราจะดูว่ามีลักษณะอย่างไร

151
00:11:22,140 --> 00:11:29,640
‫ตอนนี้สำหรับสี F มีคลาสสี F และมีหลายสีในตัว เช่น สีแดง

152
00:11:29,850 --> 00:11:34,410
‫สำหรับบูลีนที่เรียกว่าเส้นถาวร B ฉันจะเลือกจริง

153
00:11:34,410 --> 00:11:38,280
‫และสำหรับพารามิเตอร์อินพุตถัดไป เรามีการแจ้งเตือนตลอดอายุการใช้งาน

154
00:11:38,280 --> 00:11:40,850
‫มีค่าเริ่มต้นเป็นลบหนึ่ง

155
00:11:40,860 --> 00:11:44,610
‫นั่นหมายความว่าโดยค่าเริ่มต้น มันจะวาดทรงกลมดีบักสำหรับเฟรมเดียว

156
00:11:44,610 --> 00:11:52,770
‫แต่ฉันจะผ่านใน 30 F เพื่อให้เราได้ทรงกลมเป็นเวลา 30 วินาที และฉันสามารถข้ามพารามิเตอร์สองตัวสุดท้ายได้

157
00:11:52,770 --> 00:11:55,670
‫นี่คือการเรียกฟังก์ชันของเราเพื่อวาด debug sphere

158
00:11:55,680 --> 00:11:58,260
‫ลองรวบรวมสิ่งนี้และดูว่ามีลักษณะอย่างไร

159
00:11:58,710 --> 00:12:00,210
‫โอเค ฉันกลับมาที่บรรณาธิการแล้ว

160
00:12:00,210 --> 00:12:03,750
‫ฉันจะเปิดหน้าต่างที่สองเพื่อให้เราเห็นสิ่งนี้แบบเต็มหน้าจอ

161
00:12:03,750 --> 00:12:10,650
‫ฉันสามารถไปที่พอร์ตมุมมองหน้าต่างและเลือกวิวพอร์ตที่สองและตอนนี้ฉันเห็นหน้าต่างที่สองนี้

162
00:12:10,680 --> 00:12:15,300
‫อาจไม่เต็มหน้าจอเมื่อเปิดขึ้น แต่คุณสามารถขยายให้ใหญ่สุดได้เสมอ

163
00:12:15,330 --> 00:12:18,570
‫จากที่นี่ฉันสามารถเล่นเกมด้วย alt p

164
00:12:18,600 --> 00:12:19,770
‫ตอนนี้ตรวจสอบออก

165
00:12:19,770 --> 00:12:21,300
‫นี่คือขอบเขตการดีบักของเรา

166
00:12:21,330 --> 00:12:23,610
‫สังเกตว่ามันไม่กลมอย่างสมบูรณ์

167
00:12:23,610 --> 00:12:26,570
‫เราเลือก 12 สำหรับจำนวนเซ็กเมนต์

168
00:12:26,580 --> 00:12:30,960
‫ยิ่งคุณเลือกเซกเมนต์มากเท่าใด ยิ่งต้องใช้เส้นมากเท่านั้นในการวาดทรงกลม

169
00:12:30,990 --> 00:12:34,380
‫ทีนี้ นี่คือทรงกลมที่มีรัศมี 100

170
00:12:34,380 --> 00:12:40,740
‫มันค่อนข้างใหญ่ และศูนย์กลางของทรงกลมอยู่ที่ตำแหน่งของรถถัง บวกกับ 200 หน่วยขึ้นไปในอากาศ

171
00:12:40,740 --> 00:12:43,950
‫นี่คือวิธีที่เราสามารถวาด Debug Sphere ได้

172
00:12:44,130 --> 00:12:49,890
‫ดังนั้นความท้าทายของคุณคือการวาดทรงกลมดีบักโดยใช้ผลลัพธ์การติดตามใต้เคอร์เซอร์ของเรา

173
00:12:49,890 --> 00:12:55,680
‫ดังนั้นให้วาด debug sphere ในคำสั่ง if ใหม่ที่เรากำลังตรวจสอบว่าผู้อ้างอิงคอนโทรลเลอร์ของผู้เล่นไม่เป็นโมฆะหรือไม่

174
00:12:55,710 --> 00:13:03,240
‫ตอนนี้ใช้ผลการตีของเรา รับจุดกระทบจากผลการตี และใช้เป็นศูนย์สำหรับลูกโลก

175
00:13:03,390 --> 00:13:09,510
‫ตอนนี้สำหรับพารามิเตอร์อินพุตบรรทัดถาวรให้ใช้ false และสำหรับช่วงเวลาให้ใช้ค่าลบ

176
00:13:09,510 --> 00:13:14,250
‫และสิ่งนี้จะส่งผลให้เกิดการวาดทรงกลมสำหรับเฟรมเดียว ซึ่งไม่เป็นไรเพราะเรากำลังเรียกสิ่งนี้ว่าทุกๆ

177
00:13:14,250 --> 00:13:16,530
‫เฟรมภายในฟังก์ชัน tic

178
00:13:16,530 --> 00:13:20,490
‫ดังนั้นหยุดวิดีโอชั่วคราวและวาดทรงกลมแก้ไขข้อบกพร่องในฟังก์ชันขีด

179
00:13:23,240 --> 00:13:23,570
‫ตกลง.

180
00:13:23,570 --> 00:13:24,920
‫ดังนั้นฉันกลับมาที่นี่ในแทงค์

181
00:13:26,180 --> 00:13:32,480
‫ตอนนี้ ฉันมีฟังก์ชัน draw debug sphere ที่เรียกใช้ที่นี่ และเริ่มเล่น เพื่อที่ฉันจะได้คัดลอกและลบมันออกจาก

182
00:13:32,480 --> 00:13:42,380
‫start play และเราจะกลับไปติ๊กที่นี่ใน if statement ของเรา และฉันก็แค่ จะวางที่นี่และเราจะเปลี่ยนพารามิเตอร์อินพุตบางส่วน

183
00:13:42,380 --> 00:13:46,490
‫ประการหนึ่ง เรากำลังเปลี่ยนตำแหน่งสำหรับจุดศูนย์กลางของทรงกลม

184
00:13:46,490 --> 00:13:47,960
‫เราจะใช้ผลการตี

185
00:13:47,960 --> 00:13:51,200
‫ฉันจะบอกว่า hit ผล dot impact point

186
00:13:51,440 --> 00:13:54,440
‫สำหรับรัศมี ผมขอย่อให้เล็กกว่านี้หน่อย

187
00:13:54,440 --> 00:13:56,510
‫มาทำให้ถึง 25 กันเถอะ

188
00:13:56,810 --> 00:13:57,320
‫ไม่เป็นไร.

189
00:13:57,320 --> 00:13:59,360
‫ถ้าคุณไม่ทำอย่างนั้น ฉันแค่ทำสิ่งนี้

190
00:13:59,360 --> 00:14:01,280
‫ทรงกลมจึงไม่ใหญ่มาก

191
00:14:01,280 --> 00:14:06,230
‫ตอนนี้ พารามิเตอร์ตัวที่สองถึงตัวสุดท้ายที่เรากำลังส่งผ่านคือสำหรับบรรทัดถาวร

192
00:14:06,230 --> 00:14:12,500
‫ฉันจะส่งผ่านเป็นเท็จและในช่วงเวลาแทนที่จะเป็น 30 วินาที ฉันจะใช้ค่าลบหนึ่งจุด

193
00:14:12,500 --> 00:14:13,190
‫F

194
00:14:13,190 --> 00:14:18,920
‫ด้วยวิธีนี้เราจะได้ทรงกลมสำหรับเฟรมเดียว ซึ่งก็ไม่เป็นไร อีกครั้ง เรากำลังเรียกสิ่งนี้ในฟังก์ชันติ๊ก

195
00:14:18,920 --> 00:14:21,560
‫ดังนั้นเราจะเรียกสิ่งนี้ว่าทุกๆ เฟรม

196
00:14:21,560 --> 00:14:23,300
‫ไปข้างหน้าและรวบรวมสิ่งนี้

197
00:14:23,750 --> 00:14:25,130
‫ตอนนี้กลับมาอยู่ในบรรณาธิการ

198
00:14:25,130 --> 00:14:28,010
‫ถ้าผมกดเล่นตอนนี้ลองดูนี่

199
00:14:28,040 --> 00:14:34,280
‫ฉันมีทรงกลมดีบักและกำลังถูกวาดที่จุดกระทบสำหรับการติดตามเส้นใต้เคอร์เซอร์

200
00:14:34,280 --> 00:14:44,810
‫ตอนนี้เราสามารถย้ายสิ่งนี้ขึ้นไปบนกำแพงและบนวัตถุอื่น ๆ และร่องรอยก็กระทบกับวัตถุเหล่านี้เพราะถูกตั้งค่าให้ปิดกั้นช่องทางการมองเห็น

201
00:14:44,840 --> 00:14:46,460
‫สุดๆไปเลยตอนนี้

202
00:14:46,460 --> 00:14:50,630
‫ฉันสัญญาว่าเราจะหารือเกี่ยวกับการติดตามที่ซับซ้อนและการติดตามอย่างง่าย

203
00:14:50,660 --> 00:14:53,510
‫ฉันจะแสดงบางอย่างให้คุณเห็นในขณะที่เรากำลังเล่นเกม

204
00:14:53,510 --> 00:14:57,770
‫คลิกในวิวพอร์ตเพื่อให้เราควบคุมฝ่ามือของเรา

205
00:14:57,770 --> 00:15:02,360
‫ตอนนี้กดปุ่มตัวหนอนและพิมพ์คำสั่งคอนโซลแสดงการชนกัน

206
00:15:02,360 --> 00:15:07,610
‫ตอนนี้อาจดูบนหน้าจอของฉันไม่ง่ายนัก แต่คุณสามารถเห็นบนหน้าจอของคุณได้อย่างแน่นอน

207
00:15:07,610 --> 00:15:10,880
‫สังเกตการชนกันของเบี้ยของเรา

208
00:15:10,910 --> 00:15:18,020
‫ไม่เพียงแต่เราจะเห็นแคปซูลเท่านั้น แต่เรายังเห็นปริมาณการชนรอบถังและตาข่ายของป้อมปืนอีกด้วย

209
00:15:18,020 --> 00:15:20,000
‫นี่เป็นการชนกันแบบธรรมดา

210
00:15:20,090 --> 00:15:24,050
‫ผมขอแสดงให้คุณเห็นแบบด่วนๆ ว่าเราจะเห็นการชนกันแบบง่ายๆ ตรงไหน

211
00:15:24,080 --> 00:15:32,690
‫ฉันจะเข้าไปในสินทรัพย์และตาข่าย และถ้าฉันดับเบิลคลิกที่ พูด ฐานรถถังที่นี่ เรากำลังดูการชนกันที่ซับซ้อน

212
00:15:32,690 --> 00:15:42,410
‫ถ้าฉันคลิกที่ไอคอนแสดงนี้ที่ด้านบนและเลือกการชนกันแบบซ้อน ฉันจะเห็นรูปหลายเหลี่ยมทั้งหมดในการชนกันแบบซับซ้อนและมีหลายรูปหลายเหลี่ยม

213
00:15:42,440 --> 00:15:51,020
‫หากฉันคลิกไอคอนแสดงอีกครั้ง และคราวนี้ทำเครื่องหมายที่ช่องทำเครื่องหมายถัดจาก Simple Collision สังเกตว่ามีโวลุ่มการชนกันอีก

214
00:15:51,020 --> 00:15:56,780
‫สิ่งนี้เรียกว่าเปลือกชนและมีรูปทรงน้อยกว่ามาก

215
00:15:56,780 --> 00:16:00,950
‫มีรูปหลายเหลี่ยมจำนวนน้อยกว่าที่มีปริมาตรการชนกันนี้

216
00:16:00,950 --> 00:16:06,230
‫นี่คือสิ่งที่เอ็นจิ้นฟิสิกส์ใช้ในการตรวจจับการทับซ้อนในเหตุการณ์การชน

217
00:16:06,230 --> 00:16:11,360
‫ถ้ามันใช้การชนกันที่ซับซ้อน มันจะต้องมีการคำนวณมากกว่านี้มาก

218
00:16:11,360 --> 00:16:17,780
‫นี่คือเหตุผลที่เรามีปริมาณการชนแบบธรรมดา ดังนั้นประสิทธิภาพจะดีกว่ามากเมื่อทำการติดตามเส้น

219
00:16:17,780 --> 00:16:23,270
‫หากเราติดตามการชนแบบธรรมดาแทนที่จะเป็นการชนกันที่ซับซ้อน

220
00:16:23,870 --> 00:16:27,200
‫ตอนนี้เราได้ผลลัพธ์ของ Hit ที่อยู่ใต้เคอร์เซอร์แล้ว

221
00:16:27,290 --> 00:16:33,650
‫กว่าจะไปถึงที่นั่นได้ต้องใช้ความพยายามบ้าง แต่ตอนนี้เรามีแล้ว และเราได้พิสูจน์แล้วโดยแสดงตำแหน่งนี้ด้วยทรงกลมแก้ไขข้อบกพร่อง

222
00:16:33,650 --> 00:16:36,800
‫นี่เป็นวิธีที่ดีในการยืนยันว่าการติดตามของเราทำงาน

223
00:16:36,800 --> 00:16:42,650
‫ตอนนี้เรารู้ว่ามันใช้งานได้แล้ว เราก็สามารถใช้ตำแหน่งนั้นเพื่อหมุนป้อมปืนบนรถถังของเราได้

224
00:16:42,980 --> 00:16:45,260
‫และเราจะทำอย่างนั้นในวิดีโอหน้า

225
00:16:45,440 --> 00:16:46,520
‫เจอกันเร็วๆนี้ครับ

