﻿1
00:00:04,390 --> 00:00:05,440
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,440 --> 00:00:10,000
‫ในการบรรยายนี้ เราจะเพิ่มองค์ประกอบใหม่ให้กับผู้เล่น BP ของเรา นั่นคือการจัดการด้านฟิสิกส์

3
00:00:10,000 --> 00:00:16,060
‫และเรากำลังจะเรียนรู้ว่าเราจะรับตัวชี้ไปยังองค์ประกอบแกร็บเบอร์ได้อย่างไร

4
00:00:16,060 --> 00:00:20,800
‫เราจะดูด้วยว่าเราจะป้องกันตัวเองจากการชนเครื่องยนต์โดยไม่ได้ตั้งใจได้อย่างไร

5
00:00:20,800 --> 00:00:23,380
‫มาดูวิธีการกันเลย

6
00:00:24,280 --> 00:00:29,380
‫ในการที่จะจับวัตถุนั้น เราต้องโต้ตอบกับระบบฟิสิกส์

7
00:00:29,380 --> 00:00:37,090
‫และจริงๆ แล้วมีองค์ประกอบที่เราสามารถใช้ได้เรียกว่า ที่จับทางฟิสิกส์ ซึ่งช่วยให้เราสามารถจับวัตถุทางกายภาพและบอกพวกเขาว่าเราต้องการอยู่ที่ไหนในโลก

8
00:00:37,090 --> 00:00:45,760
‫แต่ทำในลักษณะที่ยอมรับข้อจำกัดทางกายภาพ ดังนั้นมันจึงไม่ ทะลุผ่านกำแพง

9
00:00:46,180 --> 00:00:54,880
‫และดูเหมือนว่าวัตถุจะอยู่บนสปริงมากกว่าที่จะปฏิบัติตามจุดที่เราบอกให้มันไปอย่างเข้มงวด

10
00:00:55,030 --> 00:00:57,910
‫เราจะใช้ส่วนประกอบที่จับทางฟิสิกส์นี้

11
00:00:57,910 --> 00:01:02,230
‫เรากำลังจะไปและเพิ่มลงในผู้เล่นของเรา BP พร้อมกับตัวจับ

12
00:01:02,230 --> 00:01:09,790
‫ไปที่ปุ่มเพิ่มภายใต้บานหน้าต่างส่วนประกอบและมองหาที่จับฟิสิกส์และเพิ่มเข้าไป

13
00:01:09,790 --> 00:01:18,460
‫และคุณจะเห็นได้ว่ามันเป็นองค์ประกอบของนักแสดง ไม่ใช่องค์ประกอบของฉาก เพราะมันลงไปที่ส่วนล่างดังนั้นจึงไม่มีการเปลี่ยนแปลงทางกายภาพของมันเอง

14
00:01:18,460 --> 00:01:26,170
‫สิ่งที่เราทำกับที่จับทางฟิสิกส์คือเราบอกให้วัตถุจับแล้วบอกว่าเราต้องการให้มันวางวัตถุที่เราคว้าไปไว้ที่ไหน

15
00:01:26,290 --> 00:01:32,050
‫หากคุณไปที่เอกสารประกอบ คุณจะเห็นสิ่งนี้ในฟังก์ชันที่พร้อมใช้งาน

16
00:01:32,060 --> 00:01:41,320
‫หากคุณเลื่อนลงไปที่ส่วนฟังก์ชัน คุณจะเห็นว่ามีส่วนประกอบการปลดล็อกและส่วนประกอบคว้าที่ฟังก์ชันตำแหน่ง

17
00:01:41,320 --> 00:01:45,940
‫นอกจากนี้ยังมีที่ตั้งเป้าหมายและการหมุนที่ตั้งไว้

18
00:01:45,940 --> 00:01:51,160
‫นี่คือจุดที่มันต้องการลองวางวัตถุ แต่เห็นได้ชัดว่ามันจะเคารพข้อจำกัดทางกายภาพในการทำเช่นนั้น

19
00:01:51,160 --> 00:01:56,440
‫และมันจะทำได้อย่างราบรื่นราวกับว่ามันอยู่บนสปริง

20
00:01:56,440 --> 00:02:05,470
‫ตอนนี้ เราจะยังไม่ใช้ฟังก์ชันเหล่านี้ แต่เราจำเป็นต้องหาวิธีที่จะยึดส่วนประกอบนี้ไว้ในส่วนประกอบแกร็บเบอร์ของเรา

21
00:02:05,590 --> 00:02:07,780
‫แล้วเราจะทำอย่างนั้นได้อย่างไร?

22
00:02:07,780 --> 00:02:15,310
‫เอาล่ะ ไปคว้า CP ของเราแล้วลองดูในการเริ่มเล่นและพยายามคว้ามันไว้

23
00:02:15,310 --> 00:02:23,980
‫ขณะนี้มีฟังก์ชันสำหรับนักแสดงที่ช่วยให้เราค้นหาส่วนประกอบตามประเภทของมันได้

24
00:02:23,980 --> 00:02:27,190
‫แต่ประเภทของที่จับทางกายภาพคืออะไร?

25
00:02:27,190 --> 00:02:31,180
‫มันเป็นองค์ประกอบการจัดการฟิสิกส์ของคุณ

26
00:02:31,180 --> 00:02:40,180
‫เพื่อให้ได้ประเภทนี้ เราจำเป็นต้องใช้การรวม และคุณสามารถเห็นการรวมในเอกสารประกอบคือ ส่วนประกอบการจัดการฟิสิกส์ไปข้างหน้าของเครื่องมือฟิสิกส์

27
00:02:40,180 --> 00:02:46,420
‫มาคัดลอกที่ไปที่คว้า CP ของเราแล้วเพิ่มเข้าไปใต้เพิ่มตัวช่วยดีบักการวาด

28
00:02:46,870 --> 00:02:53,470
‫จากนั้นสิ่งที่เราจะทำคือเรากำลังจะได้รับ ONA เพื่อรับพอยน์เตอร์ที่เราเป็นเจ้าของ

29
00:02:53,590 --> 00:03:00,370
‫จากนั้นทำลูกศรและค้นหาส่วนประกอบตามคลาส

30
00:03:00,370 --> 00:03:07,540
‫ตอนนี้ ฟังก์ชันนี้เป็นฟังก์ชันชนิดพิเศษที่เรียกว่าฟังก์ชันเทมเพลตใน C++ ซึ่งหมายความว่าคุณสามารถส่งผ่านพารามิเตอร์บางตัวที่ได้รับการประเมินจริง

31
00:03:07,540 --> 00:03:14,410
‫ๆ เมื่อคุณคอมไพล์ได้

32
00:03:14,410 --> 00:03:19,090
‫และวิธีที่คุณทำเช่นนี้คือการใช้วงเล็บมุมแบบนี้

33
00:03:19,090 --> 00:03:25,330
‫ดังนั้นคุณใช้วงเล็บมุมหลังฟังก์ชัน และกำหนดประเภทที่คุณต้องการให้หา

34
00:03:25,330 --> 00:03:30,910
‫ซึ่งในกรณีของเราคือองค์ประกอบที่คุณจัดการตามหลักฟิสิกส์

35
00:03:30,970 --> 00:03:33,250
‫แล้วคุณปิดวงเล็บมุม

36
00:03:33,250 --> 00:03:37,660
‫แต่เนื่องจากเป็นฟังก์ชัน คุณจึงต้องเรียกใช้โดยใช้วงเล็บปกติด้วย

37
00:03:37,660 --> 00:03:41,680
‫แล้วคุณใส่วงเล็บชุดที่สองต่อจากนี้

38
00:03:41,680 --> 00:03:52,330
‫ดังนั้นคุณจะเห็นว่าอาร์กิวเมนต์เวลาคอมไพล์เหล่านี้ถูกส่งผ่านโดยใช้วงเล็บมุม จากนั้นอาร์กิวเมนต์รันไทม์จะถูกส่งผ่านโดยใช้วงเล็บ

39
00:03:52,630 --> 00:04:01,390
‫เช่นเดียวกับฟังก์ชันปกติ ค่านี้จะมีค่าส่งคืน และในกรณีนี้ ค่าที่ส่งคืนจะเป็นประเภทใดก็ตามที่เราส่งผ่านมาที่นี่

40
00:04:01,390 --> 00:04:08,680
‫แต่ในฐานะพอยน์เตอร์ เราสามารถเอาพอยน์เตอร์องค์ประกอบที่จัดการทางฟิสิกส์ และสร้างตัวแปรสำหรับสิ่งที่เราจะเรียกตัวจัดการฟิสิกส์

41
00:04:08,680 --> 00:04:16,390
‫และตั้งค่าให้เท่ากับสิ่งนี้ ให้เจ้าของค้นหาส่วนประกอบตามคลาส

42
00:04:16,390 --> 00:04:26,110
‫ตอนนี้ ให้จำเครื่องหมายอัฒภาคที่ท้ายบรรทัดนี้ และนั่นคือทุกอย่างที่จำเป็น เพื่อให้เราได้รับองค์ประกอบอื่นในนักแสดงคนเดียวกันของเรา

43
00:04:26,110 --> 00:04:34,720
‫จำไว้ว่าฉันได้บอกคุณไปแล้วว่าพอยน์เตอร์อาจเป็นอันตรายได้ เพราะบางครั้งอาจเป็นโมฆะและอาจนำไปสู่การหยุดทำงาน

44
00:04:34,720 --> 00:04:46,180
‫ลองนึกภาพว่าเราลืมใส่ส่วนประกอบที่จับฟิสิกส์กับนักแสดงของเราหรือเราใส่ตัวจับสำหรับนักแสดงหน้าใหม่และเรายังไม่ได้เชื่อมต่อกับส่วนประกอบที่จับฟิสิกส์

45
00:04:46,180 --> 00:04:52,510
‫หากเป็นกรณีนี้ ตัวชี้การจัดการฟิสิกส์จะเป็นตัวชี้ว่าง

46
00:04:52,510 --> 00:04:59,020
‫และถ้าเราพยายามใช้ตัวดำเนินการลูกศรหรือตัวดำเนินการอ้างอิงบนตัวชี้นั้น เครื่องยนต์ของเราจะหยุดทำงาน

47
00:04:59,020 --> 00:05:03,340
‫และบางครั้งก็ยากที่จะดูว่าการชนนั้นเป็นอย่างไร

48
00:05:03,340 --> 00:05:10,000
‫ดังนั้นฉันจะไปข้างหน้าและทำให้การขัดข้องนี้แสดงให้คุณเห็น และคุณอาจจะจำได้ถ้ามันเกิดขึ้นกับคุณในอนาคต

49
00:05:10,000 --> 00:05:18,010
‫ฉันจะกำหนดตัวชี้การจัดการฟิสิกส์ใหม่ให้เท่ากับตัวชี้ว่าง .

50
00:05:19,060 --> 00:05:20,320
‫คีย์เวิร์ดพิเศษ

51
00:05:20,320 --> 00:05:21,630
‫เป็นโมฆะทั้งหมด

52
00:05:21,640 --> 00:05:24,550
‫Peter นั่นคือวิธีที่คุณสะกดตัวชี้ค่าว่างใน C ++

53
00:05:24,550 --> 00:05:28,030
‫จากนั้นคุณใส่เครื่องหมายอัฒภาคต่อท้าย แล้วสิ่งที่เราจะทำคือเราจะทำฟิสิกส์

54
00:05:28,030 --> 00:05:32,410
‫จัดการกับลูกศร ได้ชื่ออย่างนั้น

55
00:05:32,620 --> 00:05:38,200
‫และถ้าเราดำเนินการต่อและคอมไพล์โดยใช้ live coding และเมื่อคอมไพล์เสร็จแล้ว เราจะดำเนินการต่อไปเพื่อให้แน่ใจว่า

56
00:05:38,200 --> 00:05:43,790
‫อย่างแรกเลย ว่าเราบันทึกทุกอย่างที่เราได้มาที่นี่ในการเล่นซ้ำ เพราะผมเกี่ยวกับ

57
00:05:43,840 --> 00:05:50,140
‫ให้เครื่องพังและถ้าผมไปกดเล่นนี่เป็นผลที่เราเจอรถชน

58
00:05:50,140 --> 00:05:55,390
‫ผู้สื่อข่าว และคุณอาจถูกล่อลวงให้คิดว่าเมื่อคุณเห็นสิ่งนี้ว่ามีบางอย่างผิดปกติกับสิ่งที่ไม่จริง

59
00:05:55,390 --> 00:05:58,440
‫แต่จริงๆ แล้วรหัสของคุณมีความผิดที่นี่

60
00:05:58,450 --> 00:06:06,220
‫คุณจะเห็นว่าในรายงานข้อขัดข้องนี้ บรรทัดแรกบอกว่าปัญหามาจากคุณ คว้าเครื่องหมายทวิภาค

61
00:06:06,250 --> 00:06:08,230
‫ทวิภาค เริ่มเล่น

62
00:06:08,230 --> 00:06:11,760
‫และมันให้หมายเลขบรรทัดกับเราด้วย ซึ่งก็คือบรรทัดที่ 28

63
00:06:11,770 --> 00:06:18,490
‫คุณจะเห็นได้ว่า ณ จุดนี้ในบรรทัดที่ 28 เมื่อเราอ้างอิงตัวชี้นั้น เพื่อเรียกใช้ฟังก์ชันบนตัวชี้นั้น

64
00:06:18,490 --> 00:06:26,800
‫แท้จริงแล้วเราได้ทำข้อผิดพลาดร้ายแรงในการไม่ตรวจสอบก่อนว่าตัวชี้นั้นเป็นโมฆะหรือไม่

65
00:06:26,860 --> 00:06:28,330
‫นั่นคือสิ่งที่เราต้องทำ

66
00:06:28,330 --> 00:06:29,710
‫และเราทำสิ่งนั้นด้วยคำสั่ง if

67
00:06:29,710 --> 00:06:41,440
‫โดยพื้นฐานแล้วเราบอกว่าถ้าตัวจัดการฟิสิกส์ไม่เท่ากับตัวชี้ null จากนั้นเราสามารถไปข้างหน้าและเรียกสิ่งต่าง ๆ บนที่จับฟิสิกส์นั้นเพื่อให้เราสามารถใส่ที่จับทางกายภาพรับชื่อภายในคำสั่ง

68
00:06:41,440 --> 00:06:53,380
‫if และนั่นปกป้องเราเพราะรหัสนั้น D นั้น รหัสอ้างอิงจะไม่ถูกดำเนินการในกรณีที่เรามีตัวชี้ null

69
00:06:53,380 --> 00:06:58,330
‫ดังนั้นฉันจะไปข้างหน้าและลบบรรทัดที่ 27 ตอนนี้ที่เรากำลังตั้งค่าตัวชี้เป็นโมฆะ

70
00:06:58,330 --> 00:07:02,710
‫และฉันจะขอท้าให้คุณพิมพ์ชื่อส่วนประกอบสำหรับตัวคุณเอง

71
00:07:02,710 --> 00:07:10,930
‫ดังนั้นให้พิมพ์เฉพาะในกรณีที่เรามีส่วนประกอบจริง โดยพื้นฐานแล้วเราไม่มีตัวชี้ null และใช้ตัวอื่นเพื่อเตือนหากเราไม่สามารถจัดการองค์ประกอบนั้นและลองลบส่วนประกอบเพื่อตรวจสอบ

72
00:07:10,930 --> 00:07:19,180
‫หยุดวิดีโอชั่วคราวและมี ที่ผ่านมา.

73
00:07:22,290 --> 00:07:22,770
‫ตกลง.

74
00:07:22,770 --> 00:07:23,690
‫ยินดีต้อนรับกลับ.

75
00:07:23,700 --> 00:07:33,600
‫เราจะสร้างข้อความบันทึกใหม่ของคุณที่นี่ และเราจะบอกว่ามีตัวจัดการฟิสิกส์โคลอน เปอร์เซ็นต์ sx และเราได้ชื่อแฮนเดิลฟิสิกส์นี้

76
00:07:33,600 --> 00:07:40,200
‫ซึ่งผมจะตัดและวางเป็นอาร์กิวเมนต์ที่สองหรือ อาร์กิวเมนต์ที่สี่ลงในบันทึก

77
00:07:40,200 --> 00:07:43,260
‫U

78
00:07:43,320 --> 00:07:46,950
‫และฉันจะติดดาวเพราะมันเป็นสตริง

79
00:07:46,950 --> 00:07:50,250
‫ตอนนี้ ให้เพิ่มคำสั่ง else ภายใต้คำสั่ง if ของเรา

80
00:07:50,250 --> 00:07:55,500
‫และในนี้เราจะใส่บันทึก U อีกอัน ซึ่งจะเป็นคราวนี้แทนที่จะเป็นจอแสดงผล

81
00:07:55,500 --> 00:08:02,340
‫เราจะใส่ข้อความประเภทเตือนที่ขึ้นเป็นสีเหลืองและเราจะบอกว่าไม่ พบตัวจัดการฟิสิกส์

82
00:08:02,640 --> 00:08:07,350
‫เครื่องหมายอัศเจรีย์

83
00:08:07,350 --> 00:08:12,960
‫ตอนนี้ฉันยังไม่ได้เปิดโปรแกรมแก้ไข ดังนั้นฉันจะทำการควบคุม shift B เพื่อสร้างภายในโค้ด

84
00:08:12,960 --> 00:08:17,820
‫Visual Studio ปิดเทอร์มินัลเมื่อสำเร็จแล้วเปิดใหม่จากโครงการใหม่

85
00:08:17,820 --> 00:08:25,440
‫เมื่อเปิดตัวแล้ว ให้ไปกดเล่น เปิดบันทึกผลลัพธ์ และเราจะเห็นข้อความบันทึก

86
00:08:25,440 --> 00:08:28,440
‫มีการจัดการฟิสิกส์ที่ชื่อเป็น

87
00:08:28,440 --> 00:08:29,790
‫ตลกพอ ฟิสิกส์จัดการ

88
00:08:29,970 --> 00:08:41,160
‫ทีนี้จะเป็นอย่างไรถ้าเราต้องไปที่เครื่องเล่นบี๊บของเราและลบที่จับฟิสิกส์นั้นออกแล้วเล่นต่อไป

89
00:08:41,160 --> 00:08:48,840
‫ตอนนี้ดูบันทึกผลลัพธ์ของเราและพวกเขาไป เรามีคำเตือนสีเหลืองว่าไม่พบที่จับฟิสิกส์

90
00:08:48,840 --> 00:08:50,040
‫เลยเลิกเล่นกัน

91
00:08:50,070 --> 00:08:55,860
‫ไปข้างหน้าและเพิ่มที่จับฟิสิกส์กลับเพราะเราต้องการมันและเราจะช่วยผู้เล่น

92
00:08:55,860 --> 00:08:57,090
‫บี๊บ ของดีๆ.

93
00:08:57,090 --> 00:09:03,570
‫ดังนั้นเราจึงได้ค้นพบวิธีที่เราสามารถจับส่วนประกอบอื่น ๆ จากภายในส่วนประกอบ และเราได้เรียนรู้วิธีจัดการกับพอยน์เตอร์ที่เป็นค่าว่าง

94
00:09:03,570 --> 00:09:08,820
‫และเหตุใดเราจึงต้องระมัดระวัง

95
00:09:08,850 --> 00:09:10,500
‫เจอกันใหม่ตอนหน้าค่ะ

