﻿1
00:00:04,310 --> 00:00:05,270
‫สวัสดีและยินดีต้อนรับ.

2
00:00:05,270 --> 00:00:12,020
‫ในการบรรยายนี้ เราจะศึกษาแนวคิดของตัวแปรท้องถิ่น ตัวแปรที่มีอยู่ในฟังก์ชันที่กำหนดเท่านั้น

3
00:00:12,020 --> 00:00:21,560
‫และเราจะมาดูกันว่าเราจะใช้สิ่งนี้เพื่อตั้งค่าตำแหน่งของเราเป็นค่าที่แตกต่างจากค่าที่เก็บไว้ในเวกเตอร์ของฉันได้อย่างไร

4
00:00:21,590 --> 00:00:22,460
‫มาดำน้ำกันเถอะ

5
00:00:22,640 --> 00:00:28,520
‫จนถึงตอนนี้ เราได้จัดการกับตัวแปรที่เป็นของคลาส

6
00:00:28,520 --> 00:00:31,760
‫เราทำสิ่งนี้ใน Blueprint และตอนนี้เราทำใน C++ แล้ว

7
00:00:31,760 --> 00:00:37,190
‫และนี่หมายความว่าตัวแปรจะมีชีวิตอยู่ตราบเท่าที่อินสแตนซ์ของคลาส

8
00:00:37,190 --> 00:00:43,970
‫แต่ละอินสแตนซ์จะได้รับสำเนาของตัวแปรของตัวเอง แต่ในขณะที่อินสแตนซ์ของคลาสยังมีชีวิตอยู่ ตัวแปรนั้นจะมีสองค่า

9
00:00:43,970 --> 00:00:47,690
‫แนวคิดนี้ที่ฉันเพิ่งพูดถึงมีชื่อจริง

10
00:00:47,690 --> 00:00:49,130
‫เรียกว่าสโคป

11
00:00:49,460 --> 00:00:52,640
‫หมายความว่าตัวแปรมีชีวิตอยู่นานแค่ไหน?

12
00:00:52,640 --> 00:01:00,710
‫และฉันได้อธิบายตัวแปรอินสแตนซ์ที่เป็นตัวแปรที่ใช้งานได้ยาวนานเท่ากับอินสแตนซ์เฉพาะของคลาส

13
00:01:00,860 --> 00:01:03,890
‫ตอนนี้มีตัวแปรประเภทอื่นด้วย

14
00:01:03,890 --> 00:01:07,490
‫มีตัวแปรอยู่นานเท่ากับฟังก์ชัน

15
00:01:07,490 --> 00:01:13,220
‫โดยทั่วไปเมื่อคุณเรียกใช้ฟังก์ชันเฉพาะ ฟังก์ชันนั้นจะทำงานและทันทีที่ฟังก์ชันเสร็จสิ้น

16
00:01:13,220 --> 00:01:14,960
‫ตัวแปรจะหยุดทำงาน

17
00:01:15,050 --> 00:01:23,660
‫ดังนั้นในภาษา C++ โดยทั่วไปแล้ว ตัวแปรจะมีผลระหว่างเครื่องหมายปีกกาในไวยากรณ์

18
00:01:23,660 --> 00:01:25,520
‫ดังนั้นจึงเป็นหลักการที่ดี

19
00:01:25,520 --> 00:01:31,520
‫มันไม่ได้ถูกต้องเสมอไป แต่ฟังก์ชันติ๊ก ตัวอย่างเช่น เรามีวงเล็บปีกกา

20
00:01:31,520 --> 00:01:39,740
‫และถ้าเราต้องประกาศตัวแปรภายในฟังก์ชันติ๊ก มันก็จะมีอยู่เพียงครั้งเดียว

21
00:01:39,740 --> 00:01:44,120
‫ฟังก์ชันติ๊กถูกเรียกและจะถูกสร้างขึ้นใหม่ในครั้งต่อไป

22
00:01:44,390 --> 00:01:46,070
‫แพลตฟอร์มเคลื่อนที่

23
00:01:46,370 --> 00:01:48,650
‫เราจะเห็นได้ว่าถ้าเราดูที่แท่นเคลื่อนที่

24
00:01:48,980 --> 00:01:56,300
‫H คุณสามารถเห็นเวกเตอร์ของฉันถูกประกาศในวงเล็บปีกกาบางอันที่เป็นของคำจำกัดความของคลาส

25
00:01:56,300 --> 00:02:02,390
‫ซึ่งเป็นสาเหตุที่ตัวแปรเหล่านี้มีอยู่ตราบเท่าที่อินสแตนซ์ของคลาสมี

26
00:02:02,390 --> 00:02:04,610
‫ดังนั้นฉันอยากจะพิสูจน์เรื่องนี้กับคุณ

27
00:02:04,610 --> 00:02:11,210
‫ไปที่ DHCP ของแพลตฟอร์มที่กำลังเคลื่อนที่แล้วสร้างตัวแปรท้องถิ่นภายในสิ่งนี้

28
00:02:11,210 --> 00:02:15,050
‫ฉันจะสร้างมันด้วยวิธีเดียวกับที่เราทำ

29
00:02:15,050 --> 00:02:23,090
‫เมื่อเราประกาศข้อผิดพลาดในไฟล์ส่วนหัว เราจะมีเวกเตอร์ F แล้วตามด้วยชื่อของเวกเตอร์ ฉันจะเรียกมันว่าเวกเตอร์โลคัล

30
00:02:23,720 --> 00:02:28,130
‫จากนั้นเราสามารถตั้งค่านี้ได้ทันทีเมื่อเราสร้างมันขึ้นมา

31
00:02:28,130 --> 00:02:35,540
‫เราสามารถทำได้โดยใช้คอนสตรัคเตอร์สำหรับเวกเตอร์ F หรือเราสามารถทำได้จากตัวแปรอื่น เหมือนกับที่เราสามารถส่งตัวแปรไปยังฟังก์ชันได้

32
00:02:35,540 --> 00:02:38,870
‫ดังนั้นก่อนอื่นเราสามารถใช้วิธี Constructor ได้

33
00:02:38,870 --> 00:02:46,040
‫เราจะมีเวกเตอร์ F และผมให้มันเป็น 1 ถึง 3 แล้วก็อัฒภาคที่ท้ายบรรทัด

34
00:02:46,040 --> 00:02:48,230
‫ดังนั้นตอนนี้จึงเป็นตัวแปรท้องถิ่น

35
00:02:48,230 --> 00:02:55,070
‫มีอยู่ในฟังก์ชันนี้เท่านั้นและจะรีเซ็ตทุกครั้งที่เรียกใช้ฟังก์ชัน

36
00:02:55,070 --> 00:03:01,010
‫ถ้าผมต้องทำอะไรแบบนี้, ถ้าผมทำอะไรเหมือนในบรรทัดที่ 29 โดยเวกเตอร์ของผมถูกอัพเดต,

37
00:03:01,010 --> 00:03:09,410
‫เราสามารถมีเวกเตอร์โลคัล, เราสามารถมีเวกเตอร์โลคัล z เท่ากับเวกเตอร์โลคัลดอท z บวก

38
00:03:09,410 --> 00:03:12,740
‫หนึ่ง.

39
00:03:12,920 --> 00:03:26,240
‫และถ้าฉันต้องตั้งค่าตำแหน่งของฉันเป็นเวกเตอร์ในเครื่องนั้น มันจะเหมือนกันทุก ๆ เฟรม เพราะเรารีเซ็ตและเริ่มต้นจากตำแหน่งเดียวกัน

40
00:03:26,240 --> 00:03:28,940
‫หนึ่ง สอง สาม ทุกฟังก์ชันติ๊กเดียว

41
00:03:28,940 --> 00:03:31,640
‫ดังนั้นฟังก์ชันนี้มีอยู่ในเครื่องเท่านั้น

42
00:03:31,640 --> 00:03:38,840
‫ผมอยากให้คุณลองทำการทดลองเล็กๆ น้อยๆ เป็นความท้าทายของคุณในการกำหนดเวกเตอร์โลคัลจากเวกเตอร์ของผม

43
00:03:38,840 --> 00:03:46,010
‫โดยพื้นฐานแล้ว คุณจะทำแทนที่จะตั้งค่าจากคอนสตรัคเตอร์ คุณจะตั้งค่าจากค่าที่อยู่ในเวกเตอร์ของฉันในปัจจุบัน

44
00:03:46,040 --> 00:03:50,210
‫มันจะเอาสำเนาของเวกเตอร์นั้นไปใส่เวกเตอร์ในเครื่องของคุณ

45
00:03:50,510 --> 00:03:54,530
‫ฉันต้องการให้คุณตั้งค่าเป็นตำแหน่งโดยใช้เวกเตอร์ในเครื่อง

46
00:03:54,530 --> 00:04:00,380
‫และเนื่องจากเรากำลังพยายามอัปเดตเวกเตอร์ในพื้นที่นั้นทุกเฟรม เรามาดูกันว่าเอฟเฟกต์คืออะไร

47
00:04:00,380 --> 00:04:01,610
‫แพลตฟอร์มเคลื่อนที่หรือไม่?

48
00:04:01,610 --> 00:04:07,490
‫คุณคาดหวังที่จะลองใช้งานหรือไม่ รวบรวมการเล่นโค้ดและดูว่าได้เกิดขึ้นจริงหรือไม่

49
00:04:07,490 --> 00:04:09,140
‫หยุดวิดีโอชั่วคราวและไปกันเลย

50
00:04:12,040 --> 00:04:12,640
‫ตกลง.

51
00:04:12,640 --> 00:04:13,630
‫ยินดีต้อนรับกลับ.

52
00:04:13,630 --> 00:04:21,100
‫ดังนั้นผมจะแทนที่จะใช้คอนสตรัคเตอร์ตรงนี้เพื่อตั้งค่าเวกเตอร์โลคัล ผมจะตั้งค่าเวกเตอร์แทน

53
00:04:21,100 --> 00:04:32,830
‫เรากำลังเอาค่าที่เก็บไว้ในเวกเตอร์ของฉันและใส่ลงในเวกเตอร์ในเครื่องแล้วเรากำลังอัปเดตเวกเตอร์ในเครื่อง

54
00:04:32,830 --> 00:04:39,700
‫เรากำลังเพิ่มคำพูดของมันทุกๆ เฟรม แล้วผมต้องการตั้งค่าตำแหน่งของนักแสดงแทนจากเวกเตอร์

55
00:04:39,700 --> 00:04:45,070
‫เราจะตั้งค่าจากเวกเตอร์ในพื้นที่แทน

56
00:04:45,460 --> 00:04:48,940
‫ตอนนี้จะเกิดอะไรขึ้นในกรณีนี้ คุณคิดไหม?

57
00:04:48,940 --> 00:04:51,010
‫ลองไปข้างหน้าและหา

58
00:04:51,010 --> 00:04:56,620
‫ฉันจะกดปุ่มคอมไพล์แล้วไปข้างหน้าและกดปุ่มเล่นและเราจะเห็นว่าแพลตฟอร์มยังคงเคลื่อนไปทางขวา

59
00:04:56,620 --> 00:05:03,160
‫แต่มันจะไม่ขึ้นในทิศทาง Z

60
00:05:03,160 --> 00:05:09,700
‫คุณจะเห็นได้ว่าสิ่งนี้ไม่ได้ส่งผลกระทบเลยจริงๆ การเพิ่มขึ้นของเวกเตอร์ในพื้นที่เพราะมันถูกรีเซ็ตจากค่าปัจจุบันในเวกเตอร์ของฉัน

61
00:05:09,700 --> 00:05:14,680
‫ทุกเฟรม

62
00:05:14,680 --> 00:05:17,350
‫อย่างไรก็ตาม เวกเตอร์ของฉันยังคงได้รับการปรับปรุง

63
00:05:17,350 --> 00:05:19,840
‫ทุกเฟรม ค่า y จะเพิ่มขึ้น ทุกเฟรม

64
00:05:19,840 --> 00:05:22,840
‫และนั่นเป็นสาเหตุที่เราเห็นการเคลื่อนไหวไปทางขวา

65
00:05:22,840 --> 00:05:31,600
‫วิธีหนึ่งที่เราจะเห็นว่าการเปลี่ยนแปลงนี้เป็นเวกเตอร์โลคัลเป็นเพียงโลคัล คือการเพิ่มค่านี้จากหนึ่งเป็น

66
00:05:31,600 --> 00:05:33,820
‫100

67
00:05:33,820 --> 00:05:38,560
‫เราจึงบวก 100 เข้ากับค่าเวกเตอร์ท้องถิ่น

68
00:05:38,770 --> 00:05:42,550
‫เราไปคอมไพล์แล้วกดเล่นได้เลย

69
00:05:42,760 --> 00:05:47,710
‫และสิ่งที่คุณจะได้เห็นก็คือ ที่จริงแล้ว แพลตฟอร์มนั้นสูงขึ้นไปในอากาศ 100 ยูนิต

70
00:05:47,740 --> 00:06:01,780
‫ลองใช้เวลาสักครู่ที่นี่และดีดออกด้วย F 8 และหยุดเกมด้วยปุ่มหยุดชั่วคราวในแถบเครื่องมือหลัก จากนั้นเลือกแพลตฟอร์มที่กำลังเคลื่อนที่ของเราเพื่อดูในบานหน้าต่างรายละเอียด

71
00:06:01,780 --> 00:06:05,410
‫ในการทำเช่นนั้น ฉันต้องคลิกที่มันในวิวพอร์ตด้วยเหตุผลบางประการ

72
00:06:05,410 --> 00:06:07,540
‫บางครั้งก็ใช้งานไม่ได้ เพียงแค่คลิกที่มันในโครงร่าง

73
00:06:08,410 --> 00:06:17,440
‫และผมอยากชี้ให้คุณเห็นว่าค่าในเวกเตอร์ของผม ค่า z ในเวกเตอร์ของผมน้อยกว่าตำแหน่ง

74
00:06:17,440 --> 00:06:21,970
‫Z ของการแปลง 100 หน่วย

75
00:06:21,970 --> 00:06:27,010
‫คุณจะเห็นได้ว่าการเพิ่มเวกเตอร์ในพื้นที่นั้นมีผลกระทบ

76
00:06:27,010 --> 00:06:34,150
‫เรามีตำแหน่ง 100 หน่วย สูงกว่าตำแหน่งในเวกเตอร์ของฉัน

77
00:06:34,150 --> 00:06:39,340
‫และสิ่งที่ยอดเยี่ยมมากเกี่ยวกับตัวแปรโลคัลก็คือเมื่อฟังก์ชันเสร็จสิ้นการดำเนินการเฉพาะ

78
00:06:39,340 --> 00:06:41,500
‫ตัวแปรเหล่านี้จะถูกล้างและรีเซ็ต

79
00:06:41,500 --> 00:06:44,440
‫ดังนั้นคุณจึงสามารถรู้ได้เสมอว่าจะคาดหวังอะไรจากตัวแปรท้องถิ่น

80
00:06:44,440 --> 00:06:52,720
‫คุณทราบเสมอว่าค่าใดจะอยู่ในนั้น ซึ่งแตกต่างจากตัวแปรคลาสที่สามารถอัปเดตได้ตลอดเวลาจากฟังก์ชันอื่น

81
00:06:52,720 --> 00:06:57,190
‫ดังนั้นเราจะใส่ตัวแปรท้องถิ่นเหล่านี้ผ่านขั้นตอนในการบรรยายไม่กี่ครั้ง

82
00:06:57,190 --> 00:06:58,630
‫มาดำน้ำกัน

