﻿1
00:00:04,460 --> 00:00:05,240
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,240 --> 00:00:10,250
‫ในการบรรยายนี้ เราจะสร้างโหมดเกมมือถือนักฆ่า ซึ่งจะเป็นเพียงหนึ่งในโหมดเกมที่เป็นไปได้ที่เราสามารถสร้างได้เนื่องจากมีวิธีการแบบเสมือนจริง

3
00:00:10,250 --> 00:00:19,940
‫- ฆ่าได้ซึ่งสามารถเรียกใช้ในโหมดใดก็ได้ โหมดเกมที่เราต้องการ

4
00:00:19,970 --> 00:00:24,560
‫มาดูกันว่าเราจะใช้วิธีการเสมือนนี้อย่างไร

5
00:00:25,540 --> 00:00:28,640
‫เราจึงอยากให้เกมของเราจบลงได้

6
00:00:28,660 --> 00:00:29,760
‫การสิ้นสุดเกมหมายความว่าอย่างไร

7
00:00:29,770 --> 00:00:34,990
‫หมายความว่าเราเข้าสู่สถานะบางอย่างที่เราเป็นคนเดียวหรือแพ้

8
00:00:34,990 --> 00:00:37,240
‫เราแจ้งผู้เล่นโดยใช้ UI บางส่วน

9
00:00:37,270 --> 00:00:40,810
‫เราให้ตัวเลือกแก่พวกเขาในการรีสตาร์ทและเล่นอีกครั้ง

10
00:00:41,050 --> 00:00:43,020
‫บางสิ่งบางอย่างตามสายเหล่านั้น

11
00:00:43,030 --> 00:00:46,900
‫ตอนนี้คลาสที่เกี่ยวข้องกับสิ่งนี้มักจะเป็นโหมดเกม

12
00:00:46,900 --> 00:00:52,420
‫โหมดเกมมีหน้าที่กำหนดกฎเกณฑ์เกี่ยวกับเกม เช่น ใครชนะและใครแพ้

13
00:00:52,780 --> 00:00:56,470
‫และสำหรับสิ่งนั้น เราจะต้องรู้ว่าใครถูกฆ่า

14
00:00:56,470 --> 00:01:02,500
‫ดังนั้นเราจะใช้วิธีเสมือนนี้เรียกว่า Pawn Killed ซึ่งจะถูกเรียกจากเบี้ยมือปืนของเราเมื่อมันตาย

15
00:01:02,500 --> 00:01:09,370
‫ไม่ว่าจะเป็น AI หรือผู้เล่นที่กำลังจะตาย

16
00:01:10,360 --> 00:01:18,550
‫นอกจากนี้ ฉันต้องการเพิ่มความยุ่งยากเล็กน้อยที่นี่ นั่นคือเราจะมีโหมดเกมที่แตกต่างกันซึ่งได้มาจากโหมดเกมยิงหลักของเรา

17
00:01:18,550 --> 00:01:20,320
‫พวกเขาจะใช้โหมดเกมนั้น

18
00:01:20,320 --> 00:01:21,580
‫นั่นคือสิ่งที่ลูกศรหมายถึงที่นี่

19
00:01:21,580 --> 00:01:25,840
‫บ่อยครั้งมันขัดกับสัญชาตญาณเล็กน้อยเกี่ยวกับทิศทางของลูกศร แต่ฆ่าพวกมันให้หมด

20
00:01:25,840 --> 00:01:35,770
‫โหมดเกมสืบทอดมาจากโหมดเกมยิงปืนและจะแทนที่การจำนำที่ถูกฆ่าเพื่อนับและตัดสินใจตามกฎของเกมที่แตกต่างออกไป

21
00:01:35,770 --> 00:01:41,980
‫นั่นเป็นเหตุผลที่ฉันต้องการใส่วิธีการฆ่าจำนำเสมือนในโหมดเกมแม่นปืน แล้วใช้งานหรือแทนที่อีกครั้งในโหมดเกมฆ่าทั้งหมด

22
00:01:42,130 --> 00:01:49,570
‫ซึ่งจะเป็นโหมดเกมที่เรากำลังดำเนินการด้วยตนเอง

23
00:01:49,570 --> 00:01:58,450
‫และคุณอาจเลือกทำโหมดเกมต่างๆ ที่บางทีคุณอาจต้องการฆ่าศัตรูในระดับหนึ่งมากกว่าที่จะฆ่าพวกมันทั้งหมดหรือบางอย่างในแนวนั้น

24
00:01:58,450 --> 00:02:00,670
‫อาจจะเป็นการยึดธงบางอย่างที่แตกต่างออกไป

25
00:02:01,900 --> 00:02:08,560
‫แต่โดยพื้นฐานแล้ว สิ่งที่จะเกิดขึ้นคือเกมยิงปืน -- กำลังจะหาโหมดเกมที่มีโหมดเกมยิงปืน

26
00:02:08,560 --> 00:02:13,060
‫และมันจะเรียกมันว่า -- ถูกฆ่า

27
00:02:13,060 --> 00:02:21,250
‫จากนั้นขึ้นอยู่กับการนำไปใช้จริงที่มีอยู่จริง มันจะผ่านไปสู่การนำไปใช้ผ่านการแทนที่

28
00:02:21,910 --> 00:02:28,390
‫ความซับซ้อนอีกอย่างที่นี่คือตรรกะของ UI และตรรกะการเริ่มต้นใหม่เป็นสิ่งที่ควรเกิดขึ้นใน

29
00:02:28,390 --> 00:02:36,310
‫UI ตัวควบคุมของผู้เล่นโดยทั่วไปจะเป็นขอบเขตของผู้เล่นมากกว่าสิ่งที่เป็นสากลเช่นโหมดเกม

30
00:02:36,340 --> 00:02:45,160
‫โดยเฉพาะอย่างยิ่งในเกมที่มีผู้เล่นหลายคนเพราะโหมดเกมไม่มีอยู่ในเครื่องของผู้เล่น แต่มีอยู่ในเซิร์ฟเวอร์เท่านั้น

31
00:02:45,160 --> 00:02:49,270
‫ดังนั้นสิ่งที่ UI ควรจะเกิดขึ้นในตัวควบคุมเครื่องเล่น

32
00:02:49,540 --> 00:02:52,690
‫นั่นเป็นความซับซ้อนที่เราไม่ต้องกังวลเพราะนี่ไม่ใช่เกมที่มีผู้เล่นหลายคน

33
00:02:52,690 --> 00:02:57,430
‫แต่ก็ยังดีที่จะใช้คลาสตามที่คาดว่าจะใช้ใน Unreal

34
00:02:57,880 --> 00:03:04,750
‫ดังนั้นตัวควบคุมผู้เล่น คลาสตัวควบคุมผู้เล่นรูทจริงมีเมธอดเสมือนที่เรียกว่า เกมสิ้นสุดเพื่อจุดประสงค์นี้โดยเฉพาะ

35
00:03:04,750 --> 00:03:12,610
‫เพื่อให้โหมดเกมสามารถเรียกวิธีนี้ได้ และเราสามารถนำมาใช้ในคอนโทรลเลอร์ของผู้เล่นมือปืนของเราเพื่อทำ

36
00:03:12,610 --> 00:03:17,770
‫UI เริ่มต้นใหม่ทั้งหมด ของแบบนั้น

37
00:03:17,830 --> 00:03:23,590
‫แต่เราจะต้องเรียกมันจากโหมดเกมของเราเมื่อเราตัดสินใจว่าเกมจบลงแล้ว

38
00:03:23,590 --> 00:03:28,270
‫ดังนั้นเราจะเรียกเกมเสมือนสิ้นสุดลงที่ตัวควบคุมผู้เล่นรูท

39
00:03:28,390 --> 00:03:35,290
‫และเนื่องจากคอนโทรลเลอร์ของโปรแกรมเล่นรูทนั้นจริงๆ แล้วเป็นเกมยิง ดังนั้นคอนโทรลเลอร์ของผู้เล่นจึงต้องโอนสายกลับและโทรออก

40
00:03:35,290 --> 00:03:36,130
‫เกมนี้จบลงแล้ว

41
00:03:36,130 --> 00:03:46,570
‫ดังนั้นมันจึงดูเหมือนเป็นเส้นทางที่คดเคี้ยว เรากำลังจะถูกเรียกจากตัวจำนำเกมยิงของเราผ่านโหมดเกมยิงไปยังโหมดเกมนักฆ่าเพิ่มเติมไปยังตัวควบคุมผู้เล่นไปยังตัวควบคุมผู้เล่นยิงปืน

42
00:03:46,570 --> 00:03:52,360
‫แต่สิ่งนี้ช่วยให้เรามีความยืดหยุ่นในแง่ของการพูด เราสามารถผสมและจับคู่ตัวควบคุมของผู้เล่นต่างๆ

43
00:03:52,360 --> 00:03:55,900
‫ซึ่งจะแสดง UI ในรูปแบบต่างๆ ในระดับต่างๆ

44
00:03:55,900 --> 00:04:02,260
‫เราสามารถผสมผสานและจับคู่โหมดเกมต่างๆ ที่จะใช้งานได้ในรูปแบบต่างๆ และนั่นคือเหตุผลที่ฉันสร้างมันด้วยวิธีนี้

45
00:04:02,260 --> 00:04:07,750
‫โปรเจ็กต์ของเรานั้นเกินความสามารถไปหน่อย แต่มันแสดงให้คุณเห็นว่าสิ่งนี้สามารถขยายไปสู่โปรเจ็กต์อื่นๆ

46
00:04:07,750 --> 00:04:11,970
‫ด้วยโหมดเกม Capture the Flag และตัวควบคุมผู้เล่นประเภทต่างๆ ได้อย่างไร

47
00:04:11,980 --> 00:04:14,500
‫เลยลองนำไปปรับใช้กันดู

48
00:04:14,530 --> 00:04:18,040
‫เราจะไปกันก่อนอื่น หาโหมดเกมเส้นทาง

49
00:04:18,040 --> 00:04:22,330
‫มีการสร้างไว้แล้วเนื่องจากฉันเริ่มต้นจากโปรเจ็กต์ C++

50
00:04:22,330 --> 00:04:28,120
‫เรามีฐานโหมดเกมยิงปืนแบบง่ายๆ และสิ่งที่ฉันต้องการทำที่นี่คือการสร้างฟังก์ชันสาธารณะที่จะกลับเป็นโมฆะ

51
00:04:28,120 --> 00:04:37,480
‫และมันจะถูกฆ่า และเราจะต้องผ่านเข้าไป ถูกฆ่าตายที่นี่

52
00:04:37,480 --> 00:04:42,400
‫มันจะเป็น -- ดาวที่เรียกว่า -- ฆ่าอย่างนั้น

53
00:04:42,400 --> 00:04:46,720
‫และในตอนเริ่มต้น เราจะสร้างวิธีการเสมือน และเราจะดำเนินการต่อไป

54
00:04:46,720 --> 00:04:50,770
‫และสร้างการใช้งานพื้นฐานที่แทบไม่ทำอะไรเลยในนี้

55
00:04:50,770 --> 00:04:52,930
‫จากนั้นเราจะสร้างคลาสย่อย

56
00:04:52,930 --> 00:05:00,010
‫คลาส C++ ใหม่ ที่จะแสดงทุกคลาส และเราจะมองหาเกมยิง ฐานโหมดเกมยิงอย่างง่าย

57
00:05:00,010 --> 00:05:02,230
‫เป็นคลาสพื้นฐานของเรา

58
00:05:02,230 --> 00:05:12,010
‫และเราจะเรียกสิ่งนี้ว่าโหมดเกม kill em ทั้งหมด และสร้างคลาสนั้นต่อไป

59
00:05:12,010 --> 00:05:18,100
‫เมื่อได้รวบรวมแล้ว ฉันต้องการเปลี่ยนสักครู่แล้วไปที่ตัวละครนักกีฬาของเรา

60
00:05:18,130 --> 00:05:23,620
‫ซีพี และคุณจะเห็นในนี้ เรามีวิธีตายในวิธีรับความเสียหาย

61
00:05:23,830 --> 00:05:30,490
‫ตอนนี้ถ้าสิ่งนี้ตายไปแล้ว สิ่งที่ฉันต้องการจะทำคือการควบคุมโหมดเกมของเราและเรียก

62
00:05:30,490 --> 00:05:31,180
‫-- ฆ่า

63
00:05:31,210 --> 00:05:40,690
‫วิธีที่เราทำเช่นนี้คือเราเริ่มต้นด้วยการเรียกให้เข้าโลกเพื่อให้ได้โหมดเกม จากนั้นจึงเข้าสู่โหมดเกมตรวจสอบสิทธิ์

64
00:05:40,690 --> 00:05:46,750
‫แล้วสิ่งที่เราอยากทำก็คือให้โหมดเกมนี้เป็นแบบที่ถูกต้องคือแบบง่าย ๆ แบบรูทหนึ่ง

65
00:05:46,750 --> 00:05:52,150
‫โหมดเกมยิงแบบง่าย ๆ ที่ทำให้เราสามารถสลับตัวละครนี้ออกไปใช้กับโหมดเกมต่างๆ

66
00:05:52,150 --> 00:05:54,910
‫ได้ เช่น เป็นโหมดเกมจับธง

67
00:05:55,060 --> 00:06:01,540
‫วิธีที่เราทำสิ่งนี้ได้ เราสามารถใช้วงเล็บเหลี่ยมในโหมดเกมทั้งหมดตรงนี้

68
00:06:01,540 --> 00:06:07,900
‫และเราจะทำโหมดเกมยิงแบบง่ายๆ และเราจะต้องรวมมันไว้ด้านบนสุด

69
00:06:08,320 --> 00:06:15,270
‫ดังนั้นแฮชจึงรวมฐานโหมดเกมยิงปืนที่เรียบง่าย

70
00:06:15,550 --> 00:06:18,070
‫ฉันก็เลยไม่ได้ชื่อชั้นทั้งหมดใช่ไหม?

71
00:06:18,070 --> 00:06:18,700
‫ฉันคิดอย่างนั้น.

72
00:06:18,700 --> 00:06:22,180
‫มันจะเป็นฐานโหมดเกมยิงง่าย

73
00:06:22,360 --> 00:06:23,710
‫นั่นคือสิ่งที่เรากำลังพยายามที่จะได้รับ

74
00:06:24,130 --> 00:06:29,290
‫และเราสามารถเก็บมันไว้ในตัวแปรพอยน์เตอร์ เรียกว่าโหมดเกม

75
00:06:29,290 --> 00:06:36,790
‫แล้วสิ่งที่เราอยากทำคือบนบรรทัดใหม่นี้ เราอาจต้องการตรวจสอบว่าเราได้นี่แล้ว และมันไม่ใช่ตัวชี้ว่าง

76
00:06:36,790 --> 00:06:40,630
‫ดังนั้นโหมดเกมจึงไม่เท่ากับตัวชี้ว่าง

77
00:06:40,630 --> 00:06:50,590
‫แล้วถ้ามันไม่เท่ากับตัวชี้ null นั่นคือที่ที่เราต้องการที่จะเรียกโหมดเกมลูกศรจำนำถูกฆ่าและจำนำที่ถูกฆ่าเป็นเช่นนี้?

78
00:06:50,590 --> 00:06:55,150
‫ดังนั้นตอนนี้โหมดเกมจึงรับรู้ถึงการจำนำที่ถูกฆ่า

79
00:06:55,170 --> 00:07:00,460
‫ความท้าทายเล็ก ๆ น้อย ๆ สำหรับคุณที่จะเอาชนะโหมดเกมทั้งหมดเพื่อฆ่าพวกมัน

80
00:07:00,580 --> 00:07:06,880
‫ออกจากระบบเมื่อ -- ถูกฆ่า และตั้งค่าให้เป็นโหมดเกมเริ่มต้นในแผนที่ของคุณ

81
00:07:07,210 --> 00:07:09,680
‫หวังว่าคุณคงจะได้สัมผัสกับความท้าทายเล็กๆ น้อยๆ นั้น

82
00:07:09,700 --> 00:07:11,800
‫เราจะดำเนินการต่อไป

83
00:07:11,800 --> 00:07:19,540
‫ดังนั้นฉันจะทำสิ่งนี้โดยคัดลอกส่วนสาธารณะของฐานโหมดเกมยิงอย่างง่ายของเรา และเป็นการยากที่จะติดตามสิ่งเหล่านี้ทั้งหมด

84
00:07:19,540 --> 00:07:24,070
‫จากนั้นเราจะไปที่โหมดเกมฆ่าพวกมันทั้งหมดซึ่งสืบทอดมาจากมัน

85
00:07:24,310 --> 00:07:33,850
‫และเราจะวางในวิธีการเสมือนและเราจะเพิ่มคำสำคัญแทนที่เพื่อให้แน่ใจว่าเรากำลังแทนที่วิธีการนี้อย่างถูกต้อง

86
00:07:34,730 --> 00:07:39,620
‫จากนั้นฉันจะสร้างการใช้งานใน C ++ สำหรับฐานโหมดเกม KML ของเรา

87
00:07:40,100 --> 00:07:42,980
‫นี่คือที่ที่เราควรจะได้รับข้อความบันทึกนั้น

88
00:07:42,980 --> 00:07:48,430
‫และเพื่อเป็นการระมัดระวังอย่างยิ่ง เรารู้ว่าไม่มีอะไรในการดำเนินการ แต่คุณไม่มีทางรู้

89
00:07:48,440 --> 00:07:52,130
‫สิ่งต่าง ๆ อาจเปลี่ยนแปลงในภายหลังและเราอาจถูกระเบิด

90
00:07:52,140 --> 00:07:55,250
‫เราเลยอยากทำโรงรับจำนำฆ่า

91
00:07:56,310 --> 00:07:59,160
‫สุดยอด -- ถูกฆ่าด้วย -- ถูกฆ่า

92
00:07:59,190 --> 00:08:00,060
‫มีเหตุผล.

93
00:08:00,330 --> 00:08:09,630
‫จากนั้นเราต้องการให้คุณเข้าสู่ระบบที่นี่ โดยพื้นฐานแล้ว a -- ถูกฆ่า และเราสามารถดูว่ามันใช้งานได้หรือไม่โดยไปที่

94
00:08:09,630 --> 00:08:17,940
‫Unreal และคอมไพล์ จากนั้นไปที่รายการพิมพ์เขียวบนแถบเครื่องมือและเลือกในการตั้งค่าโปรเจ็กต์ที่

95
00:08:17,940 --> 00:08:23,250
‫โหมดเกมเริ่มต้นของเราที่เราอยากเป็น

96
00:08:23,250 --> 00:08:29,040
‫หากเราเลือกโหมดเกม คลาสพื้นฐาน เราต้องการให้มันเป็นโหมดเกมตาม KML

97
00:08:29,040 --> 00:08:31,770
‫โดยพื้นฐานแล้วไปข้างหน้าและทำอย่างนั้น

98
00:08:31,770 --> 00:08:35,640
‫อันที่จริงนั่นไม่ใช่สิ่งที่เราต้องการให้เราทำถ้าเราไปและเลือก

99
00:08:35,640 --> 00:08:45,060
‫เราอยากให้มันเป็นลูกพิมพ์เขียวของสิ่งนั้น และเราก็มีลูกพิมพ์เขียวที่มีการตั้งค่าหลายอย่าง

100
00:08:45,060 --> 00:08:47,820
‫มาทำงานการเลี้ยงลูกที่นั่นกัน

101
00:08:48,390 --> 00:08:54,090
‫เราจะไปที่ราก เราจะพบโหมดเกมยิง BP ซึ่งเราได้มาที่นี่

102
00:08:54,240 --> 00:09:02,790
‫เราจะเปลี่ยนชื่อ BP นี้ ฆ่าโหมดเกมทั้งหมด จากนั้นเราสามารถเปิดขึ้น วางหน้าต่าง เปิดโปรแกรมแก้ไขพิมพ์เขียวแบบเต็ม

103
00:09:02,790 --> 00:09:11,940
‫ไปที่การตั้งค่าคลาส และเปลี่ยนพาเรนต์เป็นโหมดเกม KML โดยพื้นฐานแล้ว C++ .

104
00:09:12,030 --> 00:09:25,740
‫และด้วยวิธีนี้เราควรรันโค้ดที่ถูกต้องหากเราไปที่ข้อความของเราไปยังบันทึกเอาต์พุตของเราแล้วกดเล่นแล้วฆ่าตัวละครที่เรามีปัญหาดูเหมือนจะไม่มีการตั้งค่าที่ถูกต้อง

105
00:09:25,740 --> 00:09:35,010
‫ดังนั้นหากเรากลับไปที่ค่าเริ่มต้นของคลาสของเราและเปลี่ยนค่าเริ่มต้น -- คลาสเป็นตัวละครยิง BP

106
00:09:35,010 --> 00:09:36,900
‫นั่นก็ควรจะถูกต้อง

107
00:09:36,900 --> 00:09:39,330
‫บันทึกและรวบรวมในกรณีที่เกิดข้อผิดพลาด

108
00:09:39,330 --> 00:09:42,000
‫แล้วตรวจสอบพิมพ์เขียวของฉันแบบหล่นลงที่นี่

109
00:09:42,000 --> 00:09:44,700
‫ได้เลือกโหมดเกม KML ซึ่งเป็นโหมด C++

110
00:09:44,700 --> 00:09:49,530
‫ดังนั้นเราจึงต้องการเลือกพิมพ์เขียวหนึ่งอันในนี้และดำเนินการต่อและกดปุ่มเล่น

111
00:09:49,530 --> 00:09:50,850
‫ตอนนี้เรามีเบี้ยของเราแล้ว

112
00:09:50,850 --> 00:09:57,330
‫เราสามารถดำเนินการต่อและฆ่าผู้ชายคนนี้และคุณจะเห็นว่าจำนำถูกฆ่าถูกพิมพ์ข้อความบันทึก

113
00:09:57,330 --> 00:10:00,090
‫มันจึงทำงานได้อย่างน่าอัศจรรย์

114
00:10:00,240 --> 00:10:05,580
‫ในการบรรยายครั้งหน้า เราจะมาดูส่วนที่สองของเรื่องนี้ ซึ่งการเรียกเกมได้จบลงแล้วเมื่อเราต้องการที่จะจบเกมจริงๆ

115
00:10:05,580 --> 00:10:12,870
‫และสามารถเริ่มต้นใหม่ได้ตั้งแต่นั้นเป็นต้นมา

116
00:10:12,960 --> 00:10:15,930
‫แล้วพบกันใหม่ในการบรรยายครั้งนั้น

