﻿1
00:00:04,080 --> 00:00:05,890
‫สวัสดีและยินดีต้อนรับกลับ

2
00:00:05,910 --> 00:00:11,990
‫ตอนนี้เรากำลังเคลื่อนรถถังของเราไปข้างหน้าและข้างหลัง แต่เราไม่มีทางที่จะบังคับรถถังได้จริงๆ

3
00:00:12,000 --> 00:00:18,260
‫ในวิดีโอนี้ เราจะพยายามหมุนรถถังโดยใช้สิ่งที่เรียกว่าการหมุนเฉพาะจุด

4
00:00:18,270 --> 00:00:23,040
‫นี่คือแอนะล็อกแบบหมุนเพื่อเพิ่มการชดเชยในพื้นที่ของนักแสดง

5
00:00:23,070 --> 00:00:31,470
‫ตอนนี้เพิ่มนักแสดงท้องถิ่นออฟเซ็ตมีพารามิเตอร์อินพุตหลายตัวและเราส่งผ่านในพารามิเตอร์แรกเท่านั้นเนื่องจากอีกสามตัวเลือกเป็นทางเลือก

6
00:00:31,650 --> 00:00:35,010
‫แต่หนึ่งในสามที่เหลือนั้นเกี่ยวข้องกับการกวาด

7
00:00:35,010 --> 00:00:41,190
‫และเราจะหารือกันเล็กน้อยเกี่ยวกับการกวาดล้าง ก่อนที่เราจะดำเนินการหมุนเวียนต่อไป

8
00:00:41,190 --> 00:00:45,660
‫ดังนั้นฉันจึงกลับมาที่เอกสารประกอบสำหรับ ADD Actor Local Offset

9
00:00:45,660 --> 00:00:48,720
‫ลองดูพารามิเตอร์อินพุตเหล่านี้อีกครั้ง

10
00:00:48,750 --> 00:00:52,770
‫อันที่สองเรียกว่า B Sweep และมันคือบูลีน

11
00:00:53,160 --> 00:00:59,790
‫ตอนนี้ หากเราเลื่อนลงมาอีกหน่อยและอ่านข้อมูลที่นี่สำหรับการกวาด B จะมีข้อความระบุว่าเรากวาดไปยังตำแหน่งปลายทางที่ทริกเกอร์คาบเกี่ยวกันระหว่างทางหรือไม่

12
00:00:59,790 --> 00:01:08,820
‫และหยุดสั้นจากเป้าหมายหากมีบางสิ่งกีดขวาง

13
00:01:09,180 --> 00:01:14,790
‫นอกจากนี้ยังกล่าวต่อไปว่ามีเพียงองค์ประกอบรูทเท่านั้นที่ถูกกวาดและตรวจสอบการบล็อกการชนกัน

14
00:01:14,790 --> 00:01:17,430
‫ส่วนประกอบย่อยเคลื่อนที่โดยไม่กวาด

15
00:01:17,700 --> 00:01:20,820
‫หากปิดการชนกัน จะไม่มีผลใดๆ

16
00:01:21,060 --> 00:01:30,390
‫เรามาพูดถึงความหมายของมันในการเขียนโปรแกรมเกมกัน การกวาดเป็นเทคนิคที่ทำโดยเอ็นจิ้น ตราบใดที่เปิดใช้งานการกวาด

17
00:01:30,570 --> 00:01:38,370
‫หากเรามีวัตถุเคลื่อนที่ เช่น ทรงกลม แทนด้วยวงกลมนี้ แต่ละเฟรมขณะที่ทรงกลมนี้เคลื่อนที่

18
00:01:38,370 --> 00:01:42,090
‫เครื่องยนต์จะทำการตรวจสอบการกวาดล้าง

19
00:01:42,090 --> 00:01:51,420
‫ซึ่งหมายความว่ากำลังตรวจสอบเพื่อดูว่าการย้ายสำหรับเฟรมเฉพาะนี้จะส่งผลให้เกิดการทับซ้อนกันระหว่างวัตถุสองชิ้นหรือไม่

20
00:01:51,630 --> 00:01:55,560
‫ฉันมีบล็อกนี้ที่นี่ แทนด้วยสี่เหลี่ยมนี้

21
00:01:56,010 --> 00:01:59,580
‫ทีนี้ลองพิจารณาว่านี่เป็นวัตถุสองชิ้นเดียวในโลก

22
00:01:59,580 --> 00:02:09,330
‫ดังนั้นในขณะที่เปิดใช้งานการกวาดเมื่อทรงกลมเคลื่อนเข้าหาวัตถุ เครื่องยนต์กำลังตรวจสอบเพื่อดูว่าวัตถุทั้งสองซ้อนทับกันหรือไม่

23
00:02:09,570 --> 00:02:19,500
‫ในตอนนี้ ในขณะที่ทรงกลมยังคงเคลื่อนที่ต่อไป สมมุติว่าในระหว่างเฟรมใดเฟรมหนึ่ง ทรงกลมจะเคลื่อนที่ไปจนซ้อนทับกับวัตถุอื่น

24
00:02:19,500 --> 00:02:31,920
‫ตอนนี้สิ่งที่เปิดใช้งานการกวาดคือเครื่องยนต์จะตรวจจับการทับซ้อนกันนี้และย้ายทรงกลมนั้นกลับมาสำหรับเฟรมนั้นโดยเฉพาะเพื่อไม่ให้ทะลุวัตถุได้จริง

25
00:02:31,950 --> 00:02:35,460
‫ตอนนี้เราไม่เคยเห็นทรงกลมเจาะวัตถุจริงๆ

26
00:02:35,490 --> 00:02:40,530
‫เครื่องยนต์จับที่คาบเกี่ยวกันก่อนที่จะมีการเคลื่อนไหวจริง

27
00:02:40,530 --> 00:02:46,020
‫ผลที่ได้คือเราจะเห็นว่าทรงกลมหยุดทับซ้อนกันเพียงเล็กน้อย

28
00:02:46,020 --> 00:02:52,710
‫ดังนั้น ถ้าสี่เหลี่ยมนี้เป็นกำแพง ตัวอย่างเช่น ทรงกลมจะหยุดที่พื้นผิวของผนัง

29
00:02:52,710 --> 00:02:55,170
‫นั่นคือสิ่งที่กวาดสำเร็จสำหรับเรา

30
00:02:55,170 --> 00:03:00,030
‫ตอนนี้เอกสารระบุว่าถ้าปิดการชนกัน สิ่งนี้จะไม่มีผลใดๆ

31
00:03:00,030 --> 00:03:04,590
‫ดังนั้นจึงต้องเปิดใช้งานการชนกันเพื่อให้การกวาดทำงาน

32
00:03:04,740 --> 00:03:12,090
‫กลับมาที่นี่ในถัง CP ในฟังก์ชันการย้าย นี่คือการเรียกของเราให้เพิ่มนักแสดงท้องถิ่น offset และถ้าเราต้องการเราสามารถส่งผ่านพารามิเตอร์อินพุตอื่นที่นี่

33
00:03:12,120 --> 00:03:20,310
‫อันที่สองคือบูลีนการกวาดเพื่อให้เราสามารถส่งผ่านจริงได้ที่นี่

34
00:03:20,310 --> 00:03:24,540
‫ลองรวบรวมสิ่งนี้และดูผลของการเปิดใช้งานการกวาด

35
00:03:24,540 --> 00:03:31,560
‫ทีนี้ถ้าเรากดเล่นและพยายามเคลื่อนผ่านกำแพง เช่น เราจะเห็นว่าเราเคลื่อนผ่านกำแพงไปทางขวา

36
00:03:31,560 --> 00:03:34,020
‫มีบางอย่างไม่ค่อยทำงานที่นี่

37
00:03:34,020 --> 00:03:38,280
‫ตอนนี้เรามาดูกันว่าองค์ประกอบเส้นทางสำหรับถังบ่อ BP คืออะไร

38
00:03:38,280 --> 00:03:41,730
‫จำได้ว่าเราใช้ส่วนประกอบแคปซูลสำหรับเส้นทาง

39
00:03:41,730 --> 00:03:45,570
‫ดังนั้นด้วยส่วนประกอบแคปซูลที่เลือกไว้ในถังบ่อ BP

40
00:03:45,570 --> 00:03:51,690
‫ไปที่แผงรายละเอียดแล้วเลื่อนลงมา เราจะเห็นส่วนที่เรียกว่าการชนกัน

41
00:03:51,690 --> 00:03:55,860
‫และที่นี่เราเห็น Collision Presets และมีเมนูแบบเลื่อนลง

42
00:03:55,860 --> 00:03:57,420
‫เลยมาขยายความกัน

43
00:03:57,420 --> 00:04:05,010
‫ตอนนี้ Collision Presets สามารถตั้งค่าตัวเลือกจำนวนเท่าใดก็ได้ และโดยค่าเริ่มต้น เราจะเห็นว่ามีการทับซ้อนกันแบบไดนามิกทั้งหมด

44
00:04:05,010 --> 00:04:08,280
‫ตอนนี้ ขึ้นอยู่กับเวอร์ชันของ Unreal Engine ที่คุณใช้อยู่

45
00:04:08,280 --> 00:04:11,580
‫คุณอาจเห็นอย่างอื่นที่นี่ แต่เราสามารถเปลี่ยนสิ่งนี้ได้

46
00:04:11,580 --> 00:04:18,750
‫หากเราเลือกรายการแบบเลื่อนลงและเลือกบล็อกไดนามิกทั้งหมด ตัวเลือกที่เป็นสีเทาด้านล่างจะเปลี่ยนไป

47
00:04:18,750 --> 00:04:25,470
‫จำไว้ว่าเราทับซ้อนกันแบบไดนามิกทั้งหมด และที่นี่เราเห็นช่องทำเครื่องหมายสามคอลัมน์

48
00:04:25,590 --> 00:04:33,240
‫นี่คือการตอบสนองการชนกันและคอลัมน์ทางด้านซ้ายแสดงรายการประเภทวัตถุการชนกัน

49
00:04:33,240 --> 00:04:37,860
‫ดังนั้นส่วนประกอบใด ๆ ก็มีประเภทวัตถุชนกันของมันเอง

50
00:04:37,860 --> 00:04:42,840
‫โปรดสังเกตว่าเราสามารถเห็นประเภทของวัตถุสำหรับแคปซูลที่ตั้งเป็นไดนามิกของโลก

51
00:04:42,840 --> 00:04:48,600
‫และเมื่อเราเปลี่ยนค่าที่ตั้งไว้ล่วงหน้าของการชนเพื่อบล็อกไดนามิกทั้งหมด คุณจะเห็นว่าการตอบสนองการชนทั้งหมดได้รับการตรวจสอบเพื่อบล็อกในการตอบสนองต่อวัตถุการชนประเภทอื่นๆ

52
00:04:48,600 --> 00:04:54,450
‫ทั้งหมด

53
00:04:54,450 --> 00:04:59,160
‫ลองกดเล่นดูว่าจะเกิดอะไรขึ้นเมื่อเราพยายามผ่านสิ่งต่างๆ

54
00:04:59,160 --> 00:05:03,630
‫คุณจะเห็นว่าเราหยุดเพียงแค่ไม่ทับซ้อนกัน

55
00:05:03,710 --> 00:05:04,860
‫ส่วนบ่อน้ำอื่นๆ

56
00:05:04,880 --> 00:05:14,340
‫ทีนี้ ถ้าฉันย้ายถังเพื่อที่เราจะได้ลองซ้อนกับผนังและวนไปรอบๆ สระอื่นๆ

57
00:05:14,360 --> 00:05:17,900
‫ตอนนี้ถ้าฉันกดเล่นฉันก็บล็อกกำแพงเช่นกัน

58
00:05:17,900 --> 00:05:26,330
‫ดังนั้นบล็อกที่ตั้งไว้ล่วงหน้าของการชนกัน ไดนามิกทั้งหมดตั้งค่าการตอบสนองการชนกันเพื่อบล็อกวัตถุประเภทอื่นๆ ทั้งหมด

59
00:05:26,330 --> 00:05:32,900
‫และคุณสามารถดูประเภทออบเจ็กต์การชนของส่วนประกอบหนึ่ง ๆ ได้เสมอโดยการเลือกในแผงส่วนประกอบและเลื่อนลงไปที่ส่วนการชนกันในแผงรายละเอียดและเปิดเมนูดร็อปดาวน์สำหรับ

60
00:05:32,900 --> 00:05:40,790
‫Collision Presets

61
00:05:40,790 --> 00:05:47,540
‫ฉันเลือกเมชพื้นฐานแล้วและประเภทของออบเจ็กต์นั้นเป็นไดนามิกของโลกและตั้งค่าให้บล็อกทั้งหมด

62
00:05:47,540 --> 00:05:55,490
‫ตอนนี้เราเห็นว่าการกวาดทำงานเนื่องจากเราตั้งค่าการชนกันล่วงหน้าสำหรับคอมพ์แคปซูลเพื่อบล็อกไดนามิกทั้งหมด

63
00:05:55,490 --> 00:06:02,720
‫และเราเห็นในเอกสารประกอบว่ามีเพียงองค์ประกอบรูทเท่านั้นที่ถูกกวาดและตรวจสอบการบล็อกการชนกัน

64
00:06:02,720 --> 00:06:06,140
‫ดังนั้นจึงไม่สำคัญว่าองค์ประกอบอื่นๆ จะถูกตั้งค่าเป็นเท่าใด

65
00:06:06,170 --> 00:06:10,790
‫เรากำลังตรวจสอบเพื่อดูว่าองค์ประกอบรูทกำลังบล็อกบางสิ่งอยู่หรือไม่

66
00:06:10,790 --> 00:06:17,510
‫ประเด็นหนึ่งที่ทำให้นักเรียนบางคนสะดุดคือพวกเขาไม่สามารถเคลื่อนไหวได้ทันทีที่ตั้งแคปซูลเพื่อบล็อกไดนามิกทั้งหมด

67
00:06:17,810 --> 00:06:23,750
‫เหตุผลหนึ่งที่อาจเป็นเพราะแคปซูลของคุณซ้อนทับกับพื้น

68
00:06:23,780 --> 00:06:35,390
‫หากแคปซูลทับซ้อนกับพื้น คุณจะไม่สามารถเคลื่อนที่ได้เนื่องจากเครื่องยนต์จะไม่ยอมให้ถังของคุณเคลื่อนที่ได้หากส่วนประกอบของแคปซูลทับซ้อนกับสิ่งที่ตั้งไว้เพื่อปิดกั้น

69
00:06:35,390 --> 00:06:41,240
‫ดังนั้น วิธีแก้ไขง่ายๆ คือต้องแน่ใจว่าแคปซูลของคุณไม่ทับซ้อนกับพื้น

70
00:06:41,720 --> 00:06:49,370
‫ตอนนี้คุณสามารถไปที่ถัง BP ของคุณและตรวจสอบให้แน่ใจว่าแคปซูลของคุณอยู่เหนือล้อที่นี่

71
00:06:49,370 --> 00:06:52,640
‫ฉันจะไปที่มุมมองออร์โธกราฟิก

72
00:06:53,720 --> 00:06:56,840
‫และเลือกตาข่ายฐานของฉันแล้วดึงมันลงมา

73
00:06:56,840 --> 00:07:00,980
‫ดังนั้นล้อจึงอยู่ใต้ส่วนประกอบแคปซูล

74
00:07:01,190 --> 00:07:06,470
‫ดังนั้นหากตาข่ายของคุณอยู่บนพื้นและแคปซูลอยู่เหนือตาข่าย

75
00:07:06,680 --> 00:07:09,010
‫คุณควรจะสามารถเคลื่อนย้ายไปมาได้

76
00:07:09,020 --> 00:07:12,110
‫ดังนั้นฉันจะไปตีเล่นและไปที่นั่น

77
00:07:12,740 --> 00:07:17,620
‫ดังนั้นเมื่อเราหมดหนทางแล้ว ก็ถึงเวลาเริ่มใช้การหมุนเวียน

78
00:07:17,630 --> 00:07:19,520
‫กลับไปที่การตั้งค่าโครงการของเรา

79
00:07:19,520 --> 00:07:29,060
‫ดังนั้นเราจึงไปแก้ไขการตั้งค่าโปรเจ็กต์ เลื่อนลงไปที่อินพุต และในส่วนอินพุต เรามีการแมปแกนของเรา

80
00:07:29,060 --> 00:07:30,710
‫ตอนนี้เราได้ดูแลแล้ว

81
00:07:30,710 --> 00:07:31,790
‫ก้าวไปข้างหน้า.

82
00:07:31,790 --> 00:07:40,220
‫ได้เวลาดูแลเรื่องถัดไปที่เรียกว่า Turn and Turn โดยมี D และ A กำหนดให้โดยที่

83
00:07:40,220 --> 00:07:44,060
‫D มีสเกลหนึ่งและ A มีสเกลเป็นลบ

84
00:07:44,060 --> 00:07:48,080
‫เราต้องการใช้ D และ AX เพื่อหมุนรถถัง

85
00:07:48,170 --> 00:07:54,470
‫ดังนั้น ในการผูกฟังก์ชันกับการแมปแกนหมุน เราจำเป็นต้องมีฟังก์ชันเพื่อผูก

86
00:07:54,470 --> 00:08:04,100
‫เรากลับมาที่โค้ดของ V แล้ว และฉันจะไปที่ไฟล์รถถัง เพื่อให้เราสามารถสร้างฟังก์ชันเพื่อผูกกับการทำแผนที่แกนเลี้ยวนั้น

87
00:08:04,100 --> 00:08:08,630
‫ตอนนี้ฉันจะเรียกฟังก์ชัน void นี้ว่าเทิร์น และเหมือนกับการย้าย

88
00:08:08,660 --> 00:08:12,560
‫ต้องการพารามิเตอร์อินพุตแบบ float และเราจะเรียกค่านี้

89
00:08:12,560 --> 00:08:19,790
‫เราได้ประกาศฟังก์ชันนี้ มากำหนดมันและ CP ของรถถัง และฉันจะใส่มันไว้ใต้ฟังก์ชันการย้าย

90
00:08:19,790 --> 00:08:27,590
‫ดังนั้นฉันจึงกำหนดเนื้อหาฟังก์ชันและฉันต้องการชื่อคลาสพร้อมกับเครื่องหมายทวิภาคคู่หน้าชื่อฟังก์ชัน

91
00:08:27,590 --> 00:08:29,270
‫ตอนนี้เรามีฟังก์ชันที่เหมาะสมแล้ว

92
00:08:29,270 --> 00:08:31,400
‫นี่ไม่ใช่สิ่งเดียวที่เราต้องทำ

93
00:08:31,430 --> 00:08:36,590
‫เราจำเป็นต้องตรวจสอบให้แน่ใจว่าฟังก์ชันนี้เชื่อมโยงกับการแมปแกนที่เรียกว่าเทิร์น

94
00:08:36,590 --> 00:08:44,000
‫เราทำอย่างนั้นในการตั้งค่าองค์ประกอบอินพุตของผู้เล่นและเราทำมันเหมือนกับที่เราทำแผนที่แกนเลื่อนไปข้างหน้า

95
00:08:44,000 --> 00:08:51,290
‫เราจะบอกว่าองค์ประกอบอินพุตของผู้เล่น เราจะใช้ตัวดำเนินการลูกศรและแกนผูก

96
00:08:52,100 --> 00:08:58,250
‫ตอนนี้ พารามิเตอร์แรกจะเป็นชื่อการแมปแกนที่ห่อด้วยแมโครข้อความ

97
00:08:58,340 --> 00:09:02,420
‫เราจะบอกว่าการเลี้ยวนั้นคือชื่อการแมปแกน

98
00:09:02,420 --> 00:09:05,180
‫ต่อไปคืออ็อบเจ็กต์ที่เราผูกกับฟังก์ชัน

99
00:09:05,180 --> 00:09:10,100
‫เราสามารถผ่านสิ่งนี้และในที่สุดเราก็ส่งผ่านในฟังก์ชันที่เราต้องการผูกอีกครั้ง

100
00:09:10,100 --> 00:09:14,600
‫เราต้องการที่อยู่ของผู้ปฏิบัติงานและกำลังจะเลี้ยวถัง

101
00:09:14,600 --> 00:09:16,550
‫มันง่ายอย่างนั้นเลย

102
00:09:16,580 --> 00:09:21,200
‫เราได้ผูกฟังก์ชันการเลี้ยวเข้ากับการทำแผนที่แกนเลี้ยว

103
00:09:21,500 --> 00:09:26,330
‫สิ่งเดียวที่เหลือคือการทำอะไรบางอย่างในฟังก์ชันเทิร์น

104
00:09:26,330 --> 00:09:32,390
‫ตอนนี้เราได้เห็นแล้วว่าเรามี ADD ตัวแสดงแบบโลคัล ออฟเซ็ต แต่มีแอนะล็อกแบบหมุนสำหรับฟังก์ชันนี้

105
00:09:32,390 --> 00:09:35,240
‫และเรียกว่า การหมุนเฉพาะที่ของ ADD Actor

106
00:09:35,240 --> 00:09:41,600
‫สิ่งนี้ทำคือเพิ่มการหมุนเวียนในท้องถิ่นให้กับนักแสดงตามชื่อของมัน และคุณจะเห็นว่ามีฟังก์ชันสองเวอร์ชันที่แตกต่างกัน

107
00:09:41,600 --> 00:09:48,530
‫รุ่นหนึ่งที่ใช้ตัวหมุน F และรุ่นที่ใช้สิ่งที่เรียกว่า F quad

108
00:09:48,530 --> 00:09:51,140
‫เราจะใช้เวอร์ชันที่ใช้ F rotator

109
00:09:51,140 --> 00:09:53,480
‫เรียกว่าการหมุนเดลต้า

110
00:09:53,480 --> 00:10:03,170
‫และเช่นเดียวกับ ADD Actor Local offset ก็สามารถใช้พารามิเตอร์การกวาดและพารามิเตอร์อินพุตอีกสองตัวที่เหมือนกันกับการเพิ่มนักแสดงโลคัลออฟเซ็ต

111
00:10:03,170 --> 00:10:08,720
‫และพารามิเตอร์อินพุตสามตัวสุดท้ายนี้เป็นทางเลือก เช่นเดียวกับการเพิ่มออฟเซ็ตท้องถิ่นของนักแสดง

112
00:10:08,720 --> 00:10:13,060
‫แทนที่จะเป็นเวกเตอร์ F เราจะผ่านตัวหมุน F

113
00:10:13,070 --> 00:10:20,210
‫กลับมาที่นี่ในฟังก์ชันเทิร์น ถ้าเราสร้าง F rotator และเราเรียกสิ่งนี้ว่าการหมุนเดลต้า เราจะเห็นว่าถ้าเราคลิกขวาที่

114
00:10:20,210 --> 00:10:26,960
‫F rotator และไปที่คำจำกัดความ เราจะไปที่ rotator และเราจะเห็นสาม ตัวแปรสมาชิกสาธารณะที่นี่ประเภท

115
00:10:26,960 --> 00:10:30,410
‫float

116
00:10:30,410 --> 00:10:37,250
‫เหมือนกับที่ F vector F rotator มีส่วนประกอบสามส่วนนี้เท่านั้น แทนที่จะเป็น X, Y และ Z

117
00:10:37,250 --> 00:10:39,140
‫เรามีการเอียงและหมุน

118
00:10:39,140 --> 00:10:42,050
‫ทีนี้ การหันเหเป็นองค์ประกอบที่เราสนใจ

119
00:10:42,050 --> 00:10:46,940
‫มันบอกว่าหมุนรอบแกนขึ้นในวงเล็บรอบแกน Z

120
00:10:46,940 --> 00:10:52,370
‫และนั่นเป็นการหมุนประเภทเดียวที่เราสนใจเกี่ยวกับการหมุนรอบแกน Z

121
00:10:52,370 --> 00:10:54,500
‫นั่นเป็นวิธีที่เราสามารถบังคับรถถังของเราได้

122
00:10:54,500 --> 00:11:00,860
‫ตอนนี้ ฉันจะชี้ให้เห็นว่ามีตัวสร้างหลายตัวสำหรับตัวหมุน F เช่นกัน และค่าดีฟอลต์บอกว่าไม่มีการเริ่มต้น

123
00:11:00,860 --> 00:11:06,110
‫เช่นเดียวกับเวกเตอร์ F

124
00:11:06,110 --> 00:11:13,190
‫ดังนั้นเราจึงสามารถใช้อันที่ใช้โฟลตเดียวและส่วนประกอบทั้งหมดจะเริ่มต้นเป็นค่าโฟลตนั้น

125
00:11:13,220 --> 00:11:18,560
‫มีค่าหนึ่งที่มีค่าลอยสามค่า และคุณสามารถดูและดูค่าอื่นๆ บางส่วนได้

126
00:11:18,560 --> 00:11:25,820
‫ตอนนี้ ผมจะชี้ให้เห็นด้วยว่ามีศูนย์ rotator และอีกอย่าง นี่คือศูนย์ rotator แบบคงที่

127
00:11:25,820 --> 00:11:42,170
‫นั่นเป็นเหตุผลที่เราสามารถกลับไปที่ถัง CP และพูดอะไรบางอย่างเช่น F rotator zero rotator zero rotator เป็นตัวแปรสมาชิกแบบคงที่และคุณสามารถเข้าถึงฟังก์ชันสมาชิกแบบคงที่และตัวแปรเช่นนี้ได้โดยการระบุชื่อคลาสด้วยตัวดำเนินการความละเอียดขอบเขตและอ้างอิงแบบคงที่

128
00:11:42,170 --> 00:11:48,440
‫ตัวแปรหรือฟังก์ชันตามชื่อ

129
00:11:48,440 --> 00:11:50,180
‫นั่นคือสิ่งที่เราทำกับคุณ

130
00:11:50,180 --> 00:11:53,060
‫สถิตการเล่นเกมรับโลกเดลต้าวินาทีเป็นแบบคงที่

131
00:11:53,310 --> 00:12:02,230
‫ฟังก์ชัน หมายความว่าเราไม่ต้องการอินสแตนซ์ที่แท้จริงของคลาสสแตติกสำหรับการเล่นเกมเพื่อให้เราเข้าถึงฟังก์ชันสแตติกนั้นได้

132
00:12:02,250 --> 00:12:04,160
‫มันมีอยู่แล้ว

133
00:12:04,170 --> 00:12:06,930
‫เช่นเดียวกับศูนย์ rotator และเวกเตอร์ศูนย์

134
00:12:07,080 --> 00:12:14,010
‫ผมจะปิดตัวหมุน h และเรามีการหมุนเดลต้า และมันถูกเตรียมข้อมูลเบื้องต้นให้เป็นศูนย์

135
00:12:14,010 --> 00:12:14,700
‫rotator

136
00:12:14,730 --> 00:12:20,280
‫ตอนนี้ระดับเสียงและบทบาทของคุณเป็นศูนย์เช่นเดียวกับ X, Y และ Z ที่ถูกทำให้เป็นศูนย์สำหรับเวกเตอร์ F

137
00:12:20,280 --> 00:12:22,920
‫ดังนั้นเราจะต้องเปลี่ยนองค์ประกอบนั้นของคุณ

138
00:12:22,920 --> 00:12:30,120
‫เหมือนกับที่ฉันทำกับตำแหน่งเดลต้าในฟังก์ชัน MOV มาสร้างโค้ดเทียมสำหรับการหมุนเดลต้ากัน

139
00:12:30,120 --> 00:12:36,690
‫ใช่ เราต้องการให้คุณตั้งค่าเป็นค่าที่ปรับขนาดตามเวลาเดลต้าแน่นอน เพราะเราต้องการให้การหมุนนี้เป็นอัตราเฟรมที่ไม่ขึ้นกับอัตราเฟรม

140
00:12:36,690 --> 00:12:43,560
‫แต่เรายังต้องการความเร็วในการเลี้ยวที่เราเรียกว่าอัตราการเลี้ยวนี้ได้

141
00:12:43,560 --> 00:12:49,890
‫เมื่อเราตั้งค่านั้นแล้ว เราก็สามารถเพิ่มการหมุนเฉพาะที่ซึ่งจะหมุนนักแสดงตามตัวหมุน

142
00:12:49,890 --> 00:12:54,630
‫F ในแต่ละเฟรม และ ya จะถูกปรับขนาดตามค่า

143
00:12:54,630 --> 00:12:59,640
‫ดังนั้นมันจะเป็นศูนย์ถ้าเราไม่กดปุ่มใดๆ และมันจะมีค่าถ้าเรากด

144
00:12:59,640 --> 00:13:00,320
‫DX และ axe

145
00:13:00,330 --> 00:13:02,190
‫ตอนนี้คุณมีความท้าทาย

146
00:13:02,190 --> 00:13:06,090
‫สิ่งนี้จะได้ผลเหมือนกับการเพิ่มออฟเซ็ตนักแสดงในพื้นที่

147
00:13:06,120 --> 00:13:09,000
‫ความแตกต่างเพียงอย่างเดียวคือตอนนี้เรากำลังหมุนเวียนนักแสดง

148
00:13:09,000 --> 00:13:14,820
‫ดังนั้น เนื่องจากเราต้องการอัตราการเลี้ยวบางประเภทสำหรับการหมุนนักแสดง คุณจะต้องสร้างตัวแปรอัตราการเลี้ยว

149
00:13:14,820 --> 00:13:20,550
‫ทำให้นี่เป็นแบบลอยตัว และวางไว้ในส่วนส่วนตัวถัดจากตัวแปรความเร็ว

150
00:13:20,550 --> 00:13:25,560
‫เปิดเผยตัวแปรนี้กับคุณสมบัติของคุณและเลือกตัวระบุคุณสมบัติใหม่ที่เหมาะสม

151
00:13:25,560 --> 00:13:32,490
‫ตอนนี้ในฟังก์ชันผลัดกัน คุณจะต้องตั้งค่าการหมุนเดลต้าโดยเฉพาะ เราสนใจเกี่ยวกับองค์ประกอบของคุณ

152
00:13:32,490 --> 00:13:41,280
‫ตั้งค่าให้เท่ากับค่าคูณกับตัวแปรอัตราการเลี้ยวของเรา และยังคูณด้วยเวลาเดลต้า และคุณพร้อมที่จะเรียกเพิ่มนักแสดงในพื้นที่

153
00:13:41,280 --> 00:13:48,780
‫การหมุนที่ผ่านใน f rotator ตอนนี้สำหรับพารามิเตอร์ที่สอง ไปข้างหน้าและส่งต่อจริงสำหรับอินพุตการกวาด

154
00:13:48,780 --> 00:13:59,190
‫B เนื่องจากเราต้องการกวาดเมื่อหมุน หยุดวิดีโอชั่วคราว และใช้การหมุนสำหรับรถถังทันที

155
00:14:02,110 --> 00:14:02,500
‫ตกลง.

156
00:14:02,500 --> 00:14:04,630
‫นี่จะค่อนข้างง่าย

157
00:14:04,630 --> 00:14:07,360
‫เราแค่ต้องการตัวแปรอัตราการเลี้ยว

158
00:14:07,390 --> 00:14:14,440
‫ตอนนี้ฉันกำลังจะเข้าไปในถังด้วยความเร็วและสร้างอัตราการหมุนแบบลอยตัว

159
00:14:14,590 --> 00:14:18,640
‫ตอนนี้คุณอาจเริ่มต้นสิ่งนี้เป็นค่าบางอย่างและก็ไม่เป็นไร

160
00:14:18,640 --> 00:14:24,040
‫ถ้ามันต่างจากที่ฉันเลือก ฉันจะเลือก 45 F และดูว่ามันทำงานอย่างไร

161
00:14:24,040 --> 00:14:29,150
‫แต่เราจะเปิดเผยสิ่งนี้กับพิมพ์เขียวเพื่อให้เราสามารถเปลี่ยนแปลงได้ในขณะที่เรากำลังพัฒนา

162
00:14:29,170 --> 00:14:35,620
‫ตอนนี้ฉันอยากให้มันแก้ไขตรงไหนก็ได้ และฉันจะติดมันให้อยู่ในหมวดหมู่เดียวกันกับความเร็ว

163
00:14:35,620 --> 00:14:42,180
‫ผมจะไปขโมยทรัพย์สินของคุณ แล้ววางตรงนี้ ด้านบน เลี้ยวขวา ให้มันตั้งไว้ที่ใดก็ได้

164
00:14:42,190 --> 00:14:45,280
‫การย้ายหมวดตอนนี้และรถถัง CP

165
00:14:45,310 --> 00:14:48,190
‫ฉันพร้อมที่จะตั้งค่าใช่สำหรับการหมุนเดลต้าแล้ว

166
00:14:48,190 --> 00:14:50,320
‫เราจะบอกว่าการหมุนเดลต้า

167
00:14:50,650 --> 00:14:51,400
‫ใช่.

168
00:14:51,790 --> 00:14:57,060
‫และเราจะตั้งค่าให้เท่ากับค่าครั้ง, อัตราเทิร์นครั้ง, เวลาเดลต้า

169
00:14:57,070 --> 00:15:06,340
‫และแน่นอน เราสามารถรับเวลาเดลต้าด้วยสแตติกการเล่นเกม U ให้เวลาเดลต้าโลกผ่านไปในสิ่งนี้ในฐานะวัตถุบริบทโลก

170
00:15:06,460 --> 00:15:08,350
‫ผมจะวางมันไว้ตรงนั้น

171
00:15:08,470 --> 00:15:12,220
‫ตอนนี้ฉันรู้แล้วว่ารหัสเทียมของฉันไม่ตรงกันทุกประการ

172
00:15:12,220 --> 00:15:13,270
‫มันอยู่ในลำดับที่ไม่ถูกต้อง

173
00:15:13,270 --> 00:15:14,830
‫เวลาเดลต้าอยู่ตรงกลางที่นี่

174
00:15:14,830 --> 00:15:21,940
‫ไม่สำคัญเพราะเมื่อคูณค่าสามค่าเข้าด้วยกัน คุณสามารถคูณค่าเหล่านั้นในลำดับใดก็ได้และยังคงได้ผลลัพธ์เหมือนเดิม

175
00:15:21,940 --> 00:15:29,350
‫ในกรณีที่คุณสงสัยเกี่ยวกับเรื่องนั้น คณิตศาสตร์จะยังคงออกมาเหมือนเดิมถ้าคุณคูณค่าทั้งสามนี้ในลำดับที่ต่างกัน

176
00:15:29,350 --> 00:15:30,910
‫ดังนั้นอย่ากังวลมากเกินไป

177
00:15:30,910 --> 00:15:32,830
‫ตอนนี้เรามีการหมุนเดลต้า

178
00:15:32,830 --> 00:15:41,860
‫สิ่งเดียวที่ต้องทำคือเรียกการเพิ่มตัวแสดงการหมุนในพื้นที่ และเรากำลังผ่านการหมุนของเดลต้า และสำหรับอินพุตที่สอง

179
00:15:41,950 --> 00:15:47,290
‫เราจะส่งต่อตามจริงเพื่อเปิดใช้งานการกวาดเมื่อหมุน

180
00:15:47,290 --> 00:15:48,670
‫ลองรวบรวมสิ่งนี้

181
00:15:48,820 --> 00:15:50,740
‫เอาล่ะ เรารวบรวมมาให้แล้ว

182
00:15:50,740 --> 00:15:57,700
‫คุณอาจสังเกตเห็นในวิดีโอถัดไปสองสามวิดีโอว่าเวกเตอร์ศูนย์และตัวหมุนศูนย์หายไปจากบรรทัดเหล่านี้

183
00:15:57,700 --> 00:16:05,890
‫นั่นเป็นเพราะฉันเริ่มต้นด้วยการเริ่มต้นเหล่านี้และตระหนักในภายหลังว่าสิ่งเหล่านี้น่าจะเริ่มต้นได้อย่างน้อยด้วยค่าศูนย์

184
00:16:05,890 --> 00:16:12,070
‫ดังนั้นอย่ากังวลหากคุณเห็นเส้นเหล่านี้ในภายหลังมีลักษณะเช่นนี้เมื่อเริ่มต้น ให้เวกเตอร์ศูนย์และตัวหมุนศูนย์ของคุณ

185
00:16:12,070 --> 00:16:16,690
‫และคุณจะเห็นว่าฉันจับสิ่งนี้ในวิดีโอในอนาคตอันใกล้นี้

186
00:16:16,690 --> 00:16:17,770
‫ดังนั้นไม่ต้องกังวล

187
00:16:17,770 --> 00:16:21,430
‫หากคุณไม่เห็นการเริ่มต้นเหล่านี้ พวกเขาควรจะอยู่ที่นั่น

188
00:16:21,430 --> 00:16:23,050
‫และเรากลับมาที่บรรณาธิการ

189
00:16:23,050 --> 00:16:33,790
‫มาเล่นกันเถอะ และฉันจะใช้ปุ่ม D และเรากำลังหมุน และปุ่ม A หมุนตัวฉันไปทางอื่น และเรายังสามารถเดินหน้าและถอยหลังได้

190
00:16:33,790 --> 00:16:39,570
‫ดังนั้นตอนนี้ที่เราสามารถหมุนและก้าวไปข้างหน้า เราก็มีความสามารถในการเคลื่อนที่ไปทั่วโลก

191
00:16:39,580 --> 00:16:41,890
‫นี่เป็นก้าวที่ยิ่งใหญ่

192
00:16:41,890 --> 00:16:47,620
‫ตอนนี้ฉันเคลื่อนที่ได้ค่อนข้างช้า แต่ไม่เป็นไรเพราะฉันสามารถเลือกรถถังของฉันและฉันสามารถค้นหาหมวดหมู่การเคลื่อนไหวและเปลี่ยนอัตราการเลี้ยวเป็นบางอย่างที่สูงกว่าเช่น

193
00:16:47,620 --> 00:16:53,230
‫90

194
00:16:53,230 --> 00:16:54,760
‫เลยลองกดเล่นดู

195
00:16:55,460 --> 00:16:57,630
‫และนั่นค่อนข้างเร็วกว่าเล็กน้อย

196
00:16:57,650 --> 00:17:00,110
‫ถ้าคุณคิดว่ามันยังช้าอยู่บ้าง

197
00:17:00,140 --> 00:17:02,330
‫แน่นอน คุณสามารถปรับสิ่งเหล่านี้ได้

198
00:17:02,330 --> 00:17:05,570
‫ผมจะเลือก -- รถถัง อีกครั้ง

199
00:17:05,570 --> 00:17:08,090
‫และแทนที่จะเป็น 400 ให้กลายเป็น 800

200
00:17:08,090 --> 00:17:08,720
‫ทำไมจะไม่ล่ะ?

201
00:17:08,750 --> 00:17:11,840
‫แทนที่จะเป็น 90 ให้เรียกว่า 120

202
00:17:12,260 --> 00:17:16,160
‫ตอนนี้ถ้าผมกดเล่น ผมค่อนข้างเร็ว

203
00:17:16,160 --> 00:17:18,800
‫นี่จึงดูดีมากจริงๆ

204
00:17:18,800 --> 00:17:23,390
‫เมื่อมองย้อนกลับไปที่แผนส่วน ตอนนี้เรามีรถถังที่สามารถเคลื่อนที่ไปทั่วโลกได้

205
00:17:23,390 --> 00:17:29,300
‫หัวข้อแรกนั้นถูกเลือกไว้อย่างแน่นอน และเรากำลังดำเนินการกับการเคลื่อนไหวของ WASD

206
00:17:29,300 --> 00:17:32,510
‫เราไม่ได้จัดการการป้อนข้อมูลด้วยเมาส์ แต่เราจะทำอย่างนั้น

207
00:17:32,510 --> 00:17:35,870
‫แต่เราเข้าใกล้อีกขั้นหนึ่งในการทำให้เกมนี้สมบูรณ์

208
00:17:35,870 --> 00:17:43,130
‫โดยสรุปแล้ว เราได้เรียนรู้ว่าการกวาดคืออะไร และเราจะเปิดใช้งานได้อย่างไร เพื่อไม่ให้วัตถุของเราผ่านกันและกัน

209
00:17:43,130 --> 00:17:50,210
‫เราได้เพิ่มการหมุนเวียนของนักแสดงในท้องถิ่น และเราทำเช่นนี้โดยใช้อัตราการเลี้ยวที่เราสามารถปรับได้ในรายละเอียด

210
00:17:50,210 --> 00:17:53,750
‫แผงในตัวแก้ไขเพื่อให้การพัฒนาง่ายขึ้นเล็กน้อย

211
00:17:53,750 --> 00:17:54,500
‫งานที่ดี.

212
00:17:54,500 --> 00:17:56,480
‫ตอนนี้เรากำลังเคลื่อนย้ายรถถังไปทั่วโลก

213
00:17:56,480 --> 00:17:57,770
‫แล้วพบกันใหม่ในวิดีโอหน้าครับ

