﻿1
00:00:04,260 --> 00:00:05,340
‫ยินดีต้อนรับกลับ.

2
00:00:05,700 --> 00:00:11,550
‫ตอนนี้เรามีโหมดเกมแล้ว และเราต้องการใช้โหมดเกมเพื่อกำหนดว่าจะเริ่มเกมได้เมื่อใด

3
00:00:11,580 --> 00:00:17,700
‫ตอนนี้บางเกมมีดีเลย์หรือตัวจับเวลานับถอยหลังที่เริ่มเมื่อเกมเริ่ม

4
00:00:17,700 --> 00:00:23,460
‫และหลังจากเวลาที่กำหนด ผู้เล่นจะได้รับอนุญาตให้ย้ายตัวละครหรือในกรณีของเรา

5
00:00:23,460 --> 00:00:25,450
‫รถถังรอบโลก

6
00:00:25,470 --> 00:00:28,500
‫เราจะนำสิ่งนั้นไปใช้ในวิดีโอนี้

7
00:00:28,530 --> 00:00:35,520
‫สิ่งนี้จะเกี่ยวข้องกับการปิดอินพุตก่อน ดังนั้นเราไม่สามารถเคลื่อนที่ไปมาได้เมื่อเกมเริ่มต้นขึ้น

8
00:00:35,520 --> 00:00:41,860
‫จากนั้นเราจะตั้งเวลาและหลังจากเวลาที่กำหนด จากนั้นเราสามารถเปิดใช้งานอินพุตได้

9
00:00:41,880 --> 00:00:47,870
‫กลับไปที่การปรับโหมดเกมรถถังและเพิ่มสองสามอย่างที่นี่

10
00:00:47,880 --> 00:00:55,380
‫อันดับแรก ฉันต้องการเพิ่มจำนวนลอยสำหรับระยะเวลาที่ควรผ่านไปเมื่อเกมเริ่มต้นก่อนที่เราจะสามารถเริ่มเคลื่อนไหวได้

11
00:00:55,410 --> 00:01:03,120
‫โฟลตนี้จะถูกเรียกว่าการหน่วงเวลาเริ่มต้น และฉันจะเริ่มต้นสิ่งนี้เป็นสามจุด F เพื่อให้เราต้องรอ

12
00:01:03,120 --> 00:01:06,800
‫3 วินาทีก่อนที่เราจะสามารถเริ่มเกมได้

13
00:01:06,810 --> 00:01:12,420
‫ตอนนี้ ทันทีที่เกมเริ่ม ฉันต้องการเริ่มตัวจับเวลานี้ ซึ่งหมายความว่าฉันต้องการฟังก์ชันที่จะเริ่มตัวจับเวลานี้

14
00:01:12,420 --> 00:01:16,510
‫และฉันจะทำให้ฟังก์ชันนี้เป็นฟังก์ชันส่วนตัวด้วย

15
00:01:16,530 --> 00:01:21,180
‫ฉันจะทำให้ฟังก์ชั่นนี้เป็นโมฆะที่เรียกว่า handle game start

16
00:01:21,210 --> 00:01:25,200
‫ตอนนี้ฉันสามารถใช้ handle game start ในโหมดปรับแต่งรถถังได้

17
00:01:25,470 --> 00:01:28,320
‫ลงที่นี่ภายใต้เริ่มเล่น

18
00:01:28,770 --> 00:01:36,930
‫ตอนนี้ฉันจะไม่ลืมที่จะเพิ่มชื่อคลาสโหมดเกมปรับแต่งรถถังที่นี่ และตอนนี้ฉันมีฟังก์ชั่นเริ่มเกมที่จับ

19
00:01:37,170 --> 00:01:40,410
‫ตอนนี้สถานที่ที่จะเรียกสิ่งนี้คือ Begin Play

20
00:01:40,620 --> 00:01:43,590
‫เนื่องจาก Begin Play ถูกเรียกเมื่อเริ่มเกม

21
00:01:43,590 --> 00:01:47,180
‫ผมจะเรียกเกมจับ เริ่มที่นี่ และเริ่มเล่น

22
00:01:47,190 --> 00:01:52,110
‫และเนื่องจากเราทำสองสิ่งที่นี่ในช่วงเริ่มต้นของเกม โดยที่การตั้งค่ารถถังและการปรับแต่งรถถัง

23
00:01:52,110 --> 00:01:58,050
‫ผู้เล่น ตัวแปรคอนโทรลเลอร์ ฉันต้องการย้ายสิ่งเหล่านี้ไปสู่การเริ่มเกมแฮนเดิล

24
00:01:58,050 --> 00:02:03,600
‫ดังนั้นฉันจะย้ายสิ่งเหล่านั้นลงไปที่การเริ่มเกมแฮนเดิล และวิธีนั้นจะตั้งค่าตัวควบคุมผู้เล่นของผู้เล่นแทงค์และแทงค์

25
00:02:03,600 --> 00:02:08,940
‫เนื่องจากเรากำลังเรียกเกมแฮนเดิลเริ่มต้นที่นี่และเริ่มเล่น

26
00:02:08,940 --> 00:02:15,990
‫นี่คือที่ที่ฉันต้องการเริ่มจับเวลาหลังจากนั้นเราสามารถเปิดใช้งานการป้อนข้อมูลของผู้ใช้

27
00:02:15,990 --> 00:02:21,480
‫ก่อนที่เราจะเริ่มจับเวลา ฉันจะปิดอินพุตเพื่อให้เราไม่สามารถย้ายถังได้

28
00:02:21,690 --> 00:02:24,420
‫และนั่นจะต้องใช้ฟังก์ชันของเรา

29
00:02:24,420 --> 00:02:29,670
‫เราวางไว้ที่นี่ในการปรับแต่งรถถัง ตัวควบคุมผู้เล่นที่เรียกว่าตั้งค่าสถานะเปิดใช้งานผู้เล่น

30
00:02:29,670 --> 00:02:33,690
‫และนั่นหมายความว่าฉันจะใช้ Tuning Tank, Player Controller

31
00:02:33,690 --> 00:02:38,400
‫และถ้าฉันจะใช้ตัวควบคุมผู้เล่นของ Tune Tank ก็ควรตรวจสอบให้แน่ใจว่ามันถูกต้อง

32
00:02:38,400 --> 00:02:46,200
‫ดังนั้นฉันจะบอกว่าถ้าปรับแต่งรถถัง ผู้เล่น ผู้ควบคุม และถ้าเราไปถึงด้านในของคำสั่ง

33
00:02:46,200 --> 00:02:57,570
‫if แล้ว ฉันสามารถปรับสถานะรถถัง ผู้เล่นควบคุม และ call set ผู้เล่นเปิดใช้งานสถานะและส่งผ่านเป็นเท็จ

34
00:02:57,690 --> 00:03:00,720
‫และด้วยเหตุนี้รถถังของเราไม่สามารถเคลื่อนที่ได้

35
00:03:00,720 --> 00:03:07,380
‫และฉันเห็นกระรอกสีแดง และนั่นเป็นเพราะฉันบอกว่าแทงค์แทงค์ ผู้ควบคุมผู้เล่นมากกว่าที่จะปรับแต่งแทงค์

36
00:03:07,830 --> 00:03:11,250
‫ดังนั้นการสะกดถูกต้องตอนนี้ฉันจึงไม่มีข้อผิดพลาด

37
00:03:11,250 --> 00:03:13,690
‫ต่อไปเราต้องเริ่มจับเวลา

38
00:03:13,710 --> 00:03:20,850
‫ตอนนี้เรารู้แล้วว่าตัวจับเวลาเกี่ยวข้องกับการใช้ตัวจับเวลา F และเราสามารถสร้างตัวจัดการตัวจับเวลา

39
00:03:20,850 --> 00:03:25,110
‫F ได้จริง ๆ แทนที่จะมีตัวแปรสมาชิกที่เป็นของคลาส

40
00:03:25,200 --> 00:03:31,470
‫ดังนั้นฉันจะดำเนินการต่อและฉันจะเรียกเครื่องเล่นนี้ว่าเปิดใช้งานตัวจับเวลา

41
00:03:31,800 --> 00:03:38,340
‫และต่อไป เราต้องตั้งเวลาสำหรับฟังก์ชันเรียกกลับสำหรับตัวจับเวลาของเรา ฉันต้องการใช้สถานะเปิดใช้งานผู้เล่นที่ตั้งค่าไว้

42
00:03:38,340 --> 00:03:45,390
‫แต่สถานะเปิดใช้งานผู้เล่นตั้งค่าเป็นฟังก์ชันที่ต้องใช้อินพุตประเภทบูลีน

43
00:03:45,990 --> 00:03:51,900
‫ตอนนี้เรายังไม่เห็นวิธีตั้งเวลาโดยใช้การเรียกกลับที่ต้องใช้พารามิเตอร์อินพุต

44
00:03:51,900 --> 00:03:56,190
‫นี้จะเกี่ยวข้องกับแนวคิดใหม่ที่เรียกว่าผู้รับมอบสิทธิ์จับเวลา

45
00:03:56,190 --> 00:03:59,310
‫มาดูระบบจับเวลาของ Unreal Engine กัน

46
00:03:59,310 --> 00:04:07,080
‫อีกครั้ง เรารู้ว่ามีตัวจับเวลาทั่วโลกที่จัดการตัวจับเวลาของเราและมีฟังก์ชันตัวจับเวลาที่ตั้งไว้

47
00:04:07,170 --> 00:04:11,280
‫ขณะนี้มีฟังก์ชั่นตั้งเวลาเกินพิกัดหลายครั้ง

48
00:04:11,370 --> 00:04:13,410
‫เราเคยเห็นหนึ่งในนั้นแล้ว

49
00:04:13,440 --> 00:04:16,710
‫ตอนนี้ฉันจะพูดถึงเวอร์ชันอื่นของฟังก์ชันนี้

50
00:04:16,710 --> 00:04:26,760
‫และรุ่นนี้ต้องมีตัวจับเวลา อัตราตัวจับเวลา หรือเวลาหน่วงในระหว่างที่เราต้องรอก่อนที่จะเรียกฟังก์ชันเรียกกลับของเรา

51
00:04:26,760 --> 00:04:33,270
‫และแทนที่จะใช้ที่อยู่ของฟังก์ชันเรียกกลับโดยตรง อาจใช้สิ่งที่เรียกว่าผู้รับมอบสิทธิ์จับเวลาได้

52
00:04:33,270 --> 00:04:41,490
‫นี่คือโครงสร้างของผู้รับมอบสิทธิ์ตัวจับเวลาประเภท F ซึ่งช่วยให้เราสร้างวัตถุที่สามารถผูกฟังก์ชันกับมันได้โดยตรง

53
00:04:41,490 --> 00:04:45,600
‫และผู้รับมอบสิทธิ์จับเวลาสามารถผูกฟังก์ชันที่ต้องใช้พารามิเตอร์อินพุตได้

54
00:04:45,600 --> 00:04:53,370
‫ตอนนี้เราสามารถสร้างตัวแปรตัวจับเวลาของ EF และเริ่มต้นได้โดยใช้ฟังก์ชัน create you object จากผู้รับมอบสิทธิ์

55
00:04:53,370 --> 00:04:55,080
‫f timer

56
00:04:55,110 --> 00:05:00,990
‫การดำเนินการนี้จะสร้างผู้รับมอบสิทธิ์จับเวลาใหม่และเริ่มต้นตามสิ่งที่เราส่งผ่านในวงเล็บ

57
00:05:00,990 --> 00:05:03,810
‫สิ่งนี้จะนำวัตถุผู้ใช้ที่เป็นของ

58
00:05:03,860 --> 00:05:08,110
‫แน่นอน คลาสที่ฟังก์ชันเรียกกลับของเรามีอยู่

59
00:05:08,120 --> 00:05:18,450
‫และต่อไปจะใช้ที่อยู่ของฟังก์ชันเรียกกลับเอง ตามด้วยค่าอินพุตใดๆ ที่เราต้องการส่งผ่านไปยังการโทรกลับของเราเมื่อมีการเรียก

60
00:05:18,470 --> 00:05:25,450
‫จากที่นั่น เราสามารถเรียกตัวตั้งเวลาจากตัวจัดการตัวจับเวลาโลก และใช้โอเวอร์โหลดที่ต้องใช้ตัวจับเวลา

61
00:05:25,460 --> 00:05:32,300
‫การโอเวอร์โหลดนี้ต้องใช้ตัวจับเวลาเอง ผู้รับมอบสิทธิ์จับเวลา อัตราการเล่นหรือโฟลตที่กำหนดความล่าช้าก่อนที่จะเรียกการโทรกลับของเรา

62
00:05:32,300 --> 00:05:38,630
‫จากนั้นบูลีนเพื่อพิจารณาว่าตัวจับเวลาของเราควรวนซ้ำหรือไม่ ดังนั้นเราจึงรู้วิธีสร้าง

63
00:05:38,630 --> 00:05:43,310
‫ตัวแทนจับเวลา F

64
00:05:43,310 --> 00:05:49,610
‫ดังนั้น ฉันอยากให้คุณสร้างมันขึ้นมาในฟังก์ชัน handle game start ภายในคำสั่ง if ใหม่ของเรา

65
00:05:49,610 --> 00:05:54,200
‫ดังนั้นให้สร้างผู้รับมอบสิทธิ์ f timer ในพื้นที่และใช้ผู้รับมอบสิทธิ์ f timer

66
00:05:54,200 --> 00:05:55,640
‫สร้างคุณวัตถุ

67
00:05:55,640 --> 00:06:05,870
‫ตอนนี้เราจะต้องส่งผ่านวัตถุผู้ใช้และโดยปกติเราใช้สิ่งนี้เป็นวัตถุผู้ใช้ แต่ฟังก์ชั่นที่เราต้องการเรียกนั้นมีอยู่ในตัวควบคุมเครื่องเล่น

68
00:06:05,870 --> 00:06:20,300
‫ดังนั้นการส่งผ่านคือตัวควบคุมผู้เล่นรถถังที่ปรับแต่งได้เป็นอินพุตแรกที่จะเป็นวัตถุของผู้ใช้และฟังก์ชั่นการโทรกลับจะถูกตั้งค่าสถานะที่เปิดใช้งานของผู้เล่นซึ่งฟังก์ชั่นที่เราเพิ่มลงในตัวควบคุมผู้เล่นที่กำหนดเองของเรา

69
00:06:20,300 --> 00:06:25,730
‫อย่าลืมที่อยู่ของโอเปอเรเตอร์และในฐานะอินพุตที่สามเราจะส่งต่อค่า

70
00:06:25,730 --> 00:06:33,590
‫จริงอยู่ นี่คือสิ่งที่จะถูกส่งต่อไปยังสถานะเปิดใช้งานผู้เล่นที่ตั้งค่าไว้ เมื่อการโทรกลับของเราถูกเรียกเมื่อสิ้นสุดการจับเวลา

71
00:06:33,590 --> 00:06:36,710
‫หยุดวิดีโอชั่วคราวแล้วลองทำดู

72
00:06:39,560 --> 00:06:50,540
‫ภายใต้ตัวจับเวลาของเรา ฉันจะสร้างผู้รับมอบสิทธิ์ตัวจับเวลา F ในพื้นที่ และฉันจะเรียกเครื่องเล่นนี้ว่าเปิดใช้ผู้รับมอบสิทธิ์ตัวจับเวลา

73
00:06:51,140 --> 00:06:51,710
‫ไม่เป็นไร.

74
00:06:51,710 --> 00:06:53,030
‫ถ้าคุณตั้งชื่อเป็นอย่างอื่น

75
00:06:53,030 --> 00:07:00,200
‫ตอนนี้ฉันจะเริ่มต้นสิ่งนี้โดยใช้ f timer, delegate, create you object

76
00:07:00,470 --> 00:07:06,590
‫และสิ่งนี้จะใช้วัตถุของผู้ใช้ก่อน และนั่นจะเป็นตัวควบคุมผู้เล่นรถถังของเรา

77
00:07:06,590 --> 00:07:11,300
‫ดังนั้นผมจะบอกว่าปรับแต่งตัวควบคุมผู้เล่นรถถังเป็นอินพุตแรก

78
00:07:11,390 --> 00:07:23,360
‫และสำหรับวินาทีที่เราต้องการฟังก์ชันเรียกกลับของเรา และนั่นจะเป็นการปรับแต่งผู้เล่นแทงค์ สถานะเปิดใช้งานผู้เล่นที่ตั้งค่าคอนโทรลเลอร์

79
00:07:23,360 --> 00:07:34,670
‫และฉันไม่สามารถลืมได้ ฉันต้องการที่อยู่ของโอเปอเรเตอร์สำหรับแอดเดรสของฟังก์ชันนี้ และค่าที่ฉันต้องการส่งผ่านไปยังฟังก์ชันเรียกกลับนี้จะเป็นจริงในลักษณะนั้น

80
00:07:34,670 --> 00:07:42,290
‫เมื่อสิ้นสุดการหน่วงเวลา เมื่อการโทรกลับนี้ถูกเรียก true จะเป็นค่าที่ส่งผ่านไปยังฟังก์ชันการโทรกลับ

81
00:07:42,290 --> 00:07:48,770
‫ตอนนี้ฉันพร้อมที่จะโทรตั้งเวลาซึ่งหมายความว่าฉันต้องโทรหาผู้จัดการตัวจับเวลาทั่วโลก

82
00:07:48,950 --> 00:07:51,530
‫จากนั้นฉันสามารถโทรตั้งเวลาได้

83
00:07:52,070 --> 00:08:00,560
‫และฟังก์ชั่นโอเวอร์โหลดที่เราใช้ก่อนนั้นจะใช้ตัวจับเวลาและนั่นจะเป็นตัวจัดการตัวจับเวลาที่เปิดใช้งานเครื่องเล่น

84
00:08:00,590 --> 00:08:04,370
‫ข้อมูลถัดไปที่ฉันจะส่งผ่านคือผู้รับมอบสิทธิ์

85
00:08:04,370 --> 00:08:08,630
‫นั่นจะเป็นการเปิดใช้งานผู้เล่น ผู้รับมอบสิทธิ์จับเวลา

86
00:08:10,130 --> 00:08:10,520
‫ต่อไป.

87
00:08:10,520 --> 00:08:16,700
‫เราต้องการเวลาดีเลย์ของเรา และนั่นจะเป็นการดีเลย์เริ่มต้น ซึ่งเป็นโฟลตที่เราเพิ่งสร้างขึ้น

88
00:08:16,730 --> 00:08:20,120
‫ต่อไปฉันจะผ่านในการเริ่มต้นล่าช้า

89
00:08:20,990 --> 00:08:28,430
‫และสุดท้าย ฉันไม่ต้องการให้ตัวจับเวลานี้วนซ้ำ ดังนั้นฉันจะส่งผ่านเป็นเท็จ เพื่อไม่ให้เกิดพฤติกรรมวนซ้ำ

90
00:08:29,300 --> 00:08:33,020
‫ตอนนี้ฉันจะไปข้างหน้าและเยื้องอินพุตเหล่านี้เพื่อให้ดูสวย

91
00:08:33,710 --> 00:08:38,690
‫และตอนนี้เรากำลังเรียกตัวตั้งเวลาโดยใช้ผู้รับมอบสิทธิ์ตัวจับเวลาใหม่ของเรา

92
00:08:38,690 --> 00:08:45,380
‫และเมื่อสิ้นสุดเวลาหน่วงนี้ เราควรได้รับฟังก์ชันเรียกกลับของเรา ตั้งค่าสถานะเปิดใช้งานผู้เล่นที่เรียกใช้ด้วยค่าที่ส่งผ่านจริงในขณะนี้

93
00:08:45,380 --> 00:08:55,190
‫เนื่องจากความล่าช้าในการเริ่มต้นคือ 3 วินาที และเรากำลังเรียกสถานะเปิดใช้งานผู้เล่นที่ตั้งค่าเป็นเท็จก่อนที่เราจะตั้งเวลา

94
00:08:55,190 --> 00:09:00,920
‫เมื่อเรากดเล่น เราไม่น่าจะเคลื่อนที่ได้จนกว่าการดีเลย์สามวินาทีนี้จะหมดลง

95
00:09:00,920 --> 00:09:03,590
‫ลองรวบรวมสิ่งนี้และดูว่ามันทำงานอย่างไร

96
00:09:04,100 --> 00:09:09,140
‫ดังนั้นฉันจะไปข้างหน้าและตีเล่นและฉันพยายามย้ายไปรอบ ๆ และฉันทำไม่ได้

97
00:09:09,140 --> 00:09:12,470
‫และหลังจากนั้น 3 วินาที ฉันก็ขยับตัวได้

98
00:09:12,500 --> 00:09:14,210
‫และตรวจสอบสิ่งนี้ด้วย

99
00:09:14,240 --> 00:09:17,330
‫สังเกตว่าเคอร์เซอร์ของฉันคือกากบาท

100
00:09:17,330 --> 00:09:23,000
‫อาจมองเห็นได้ยากบนหน้าจอ แต่คุณควรมองเห็นบนหน้าจอได้ตามปกติ

101
00:09:23,000 --> 00:09:27,470
‫และสิ่งนี้ทำให้ฉันเล็งและควบคุมรถถังได้ง่ายขึ้นมาก

102
00:09:27,470 --> 00:09:28,820
‫การหมุนของป้อมปืน

103
00:09:29,210 --> 00:09:30,140
‫สมบูรณ์แบบ.

104
00:09:30,140 --> 00:09:37,370
‫โดยสรุปแล้ว เราได้สร้างฟังก์ชันแฮนเดิลเกมสตาร์ทสำหรับโหมดเกม และเราเรียกสิ่งนี้ว่าและเริ่มเล่น

105
00:09:37,580 --> 00:09:47,180
‫และเรายังตั้งเวลาโดยใช้ผู้รับมอบสิทธิ์จับเวลาซึ่งเราผูกฟังก์ชันสถานะที่เปิดใช้งานผู้เล่นตั้งค่าไว้บนตัวควบคุมเครื่องเล่น

106
00:09:47,180 --> 00:09:58,340
‫สิ่งนี้ทำให้เรามีฟังก์ชั่นเรียกกลับสำหรับตัวจับเวลาของเราที่รับพารามิเตอร์อินพุต และเราใช้สิ่งนี้เพื่อเปิดใช้งานการป้อนข้อมูลของผู้ใช้หลังจากผ่านไปสามวินาทีเมื่อเกมเริ่ม

107
00:09:58,370 --> 00:10:05,690
‫ตอนนี้ มันอาจจะน่าหงุดหงิดสำหรับผู้เล่น ถ้าพวกเขาไม่มีสัญญาณภาพ เป็นการบอกให้พวกเขารู้ว่าอินพุตไม่ได้เปิดใช้งาน

108
00:10:05,690 --> 00:10:08,150
‫บางอย่างเช่นการนับถอยหลังบนหน้าจอ

109
00:10:08,150 --> 00:10:10,640
‫เราจะจัดการเรื่องนี้ในวิดีโอหน้า

110
00:10:10,640 --> 00:10:12,410
‫แต่สำหรับตอนนี้ขอแสดงความยินดี

111
00:10:12,410 --> 00:10:18,170
‫ตอนนี้คุณรู้วิธีผูกฟังก์ชันที่นำพารามิเตอร์อินพุตไปยังผู้รับมอบสิทธิ์จับเวลาแล้ว

112
00:10:18,170 --> 00:10:19,640
‫แล้วพบกันใหม่ในวิดีโอหน้าครับ

