﻿1
00:00:04,370 --> 00:00:05,390
‫Xin chào và chào mừng.

2
00:00:05,390 --> 00:00:12,170
‫Trong bài giảng này, chúng ta sẽ thiết lập mối liên kết giữa bộ chuyển động và bộ kích hoạt bằng cách sử dụng một kỹ

3
00:00:12,170 --> 00:00:18,230
‫thuật được gọi là tiêm phụ thuộc để vào cuối bài giảng, nếu chúng ta dán gargoyle vào, thì cánh cửa sẽ di chuyển

4
00:00:18,230 --> 00:00:20,810
‫xuống, hoặc ít nhất là một phần nào đó.

5
00:00:20,810 --> 00:00:24,260
‫Hãy đi sâu vào và xem điều này hoạt động như thế nào.

6
00:00:25,080 --> 00:00:26,460
‫Và tôi lấy một cốc.

7
00:00:26,490 --> 00:00:33,030
‫Chúng tôi đã thấy rằng có một sự phụ thuộc, cái mà chúng tôi gọi là sự phụ thuộc đối với chốt vật lý.

8
00:00:33,030 --> 00:00:40,350
‫Bộ lấy này không thể thực hiện công việc của nó trừ khi bạn có một thành phần xử lý vật lý ở đâu đó xung quanh bây giờ, nó

9
00:00:40,350 --> 00:00:42,960
‫sẽ xảy ra rằng thành phần kích hoạt giống nhau.

10
00:00:42,960 --> 00:00:50,100
‫Thành phần kích hoạt, để thực hiện đúng công việc của nó, cần phải có quyền truy cập vào thành phần động cơ.

11
00:00:50,460 --> 00:00:57,360
‫Tuy nhiên, nó phức tạp hơn một chút trong trường hợp này vì chắc chắn, trong trường hợp cánh cửa bí mật của

12
00:00:57,360 --> 00:01:02,400
‫chúng ta, bộ kích hoạt và đối tượng chuyển động nằm trong cùng một tác nhân.

13
00:01:02,730 --> 00:01:08,220
‫Vì vậy, bạn có thể lấy một đối tượng bằng cách tìm thành phần của kiểu trên tác nhân.

14
00:01:08,220 --> 00:01:14,490
‫Nhưng điều gì sẽ xảy ra nếu và chúng tôi sẽ có tình huống này trong kịch bản của tôi, nơi tôi muốn người kích

15
00:01:14,490 --> 00:01:20,760
‫hoạt của tôi ở một phần khác của căn phòng với diễn viên đang di chuyển tốt để cho phép loại linh hoạt đó.

16
00:01:20,760 --> 00:01:26,940
‫Chúng tôi muốn nó sao cho trình kích hoạt không phải đi và tìm các phụ thuộc của chính nó.

17
00:01:26,940 --> 00:01:30,330
‫Và thực sự có một cái tên cho loại khái niệm chương trình này.

18
00:01:30,330 --> 00:01:32,640
‫Nó được gọi là tiêm phụ thuộc.

19
00:01:32,640 --> 00:01:37,680
‫Về cơ bản, đó là trong trường hợp chúng ta có một cái gì đó nói rằng, tôi cần một đối tượng khác, nhưng tôi không thể tự

20
00:01:37,680 --> 00:01:40,230
‫mình tìm thấy nó hoặc tôi không muốn tự mình tìm thấy nó.

21
00:01:40,290 --> 00:01:47,940
‫Và thường là hợp lý nếu không để nó cho đối tượng đang làm công việc của riêng nó, khiến nó có một công việc

22
00:01:47,940 --> 00:01:50,850
‫khác là cố gắng giữ lấy một đối tượng.

23
00:01:51,300 --> 00:02:00,810
‫Vì vậy, cách chúng ta có thể làm là tạo ra một cơ chế cho các bản thiết kế để cho thành phần kích hoạt

24
00:02:00,810 --> 00:02:02,730
‫biết nơi tìm động cơ.

25
00:02:02,910 --> 00:02:09,330
‫Và cách chúng ta sẽ làm điều này là tạo một hàm có thể gọi trong bản thiết kế chi tiết trên thành phần kích hoạt của chúng ta.

26
00:02:09,810 --> 00:02:11,220
‫Vì vậy, nó sẽ được công khai.

27
00:02:11,220 --> 00:02:16,980
‫Chúng tôi sẽ đặt nó trong phần công khai bên dưới thành phần đánh dấu, và nó sẽ là một hàm

28
00:02:16,980 --> 00:02:22,710
‫U để sau đó nó có thể nằm trong dấu ngoặc đơn, có thể gọi bản thiết kế chi tiết.

29
00:02:23,280 --> 00:02:26,130
‫Và không cần thiết phải có nhiều chức năng này.

30
00:02:26,130 --> 00:02:33,330
‫Nó sẽ vô hiệu vì nó không cần nó trả lại một thứ, nhưng nó sẽ được thiết lập mover, vì vậy

31
00:02:33,330 --> 00:02:40,860
‫nó sẽ thiết lập một liên kết đến mover và để nó thiết lập một liên kết với mover, nó cần phải nhận một

32
00:02:40,860 --> 00:02:43,620
‫con trỏ đến một thành phần động lực.

33
00:02:43,620 --> 00:02:51,540
‫Vì vậy, đó sẽ là bạn ngôi sao động lực và chúng ta chỉ có thể gọi đây là người dẫn đường như vậy và đặt dấu chấm phẩy ở

34
00:02:51,540 --> 00:02:52,440
‫cuối dòng đó.

35
00:02:52,830 --> 00:02:55,350
‫Và chúng ta cần lưu trữ cái này ở đâu đó.

36
00:02:55,350 --> 00:02:57,300
‫Vì vậy, chúng tôi sẽ tạo một biến riêng tư mới.

37
00:02:57,300 --> 00:03:02,280
‫Nó sẽ không phải là một thuộc tính mới và nó sẽ chỉ là một con trỏ di chuyển U, mà

38
00:03:02,280 --> 00:03:04,530
‫chúng ta cũng sẽ gọi là một động cơ.

39
00:03:04,560 --> 00:03:12,900
‫Giống như vậy và những gì chúng ta sẽ làm là triển khai bộ di chuyển tập hợp này trong CPP để nó đặt di chuyển này thành

40
00:03:12,900 --> 00:03:15,660
‫một con trỏ, theo mặc định sẽ là null.

41
00:03:16,050 --> 00:03:17,790
‫Và chúng tôi phải làm một điều nữa.

42
00:03:17,790 --> 00:03:20,640
‫Chúng tôi phải bao gồm tệp tiêu đề cho trình di chuyển của chúng tôi.

43
00:03:21,150 --> 00:03:26,370
‫Bây giờ trong trường hợp này, vì tệp tiêu đề nằm trong cùng thư mục với thành

44
00:03:26,370 --> 00:03:36,870
‫phần trình kích hoạt, tất cả những gì chúng ta phải làm là băm bao gồm trích dẫn động cơ H và điều đó sẽ đảm bảo rằng thành phần trình kích hoạt nhận thức được

45
00:03:36,870 --> 00:03:38,100
‫loại trình kích hoạt.

46
00:03:38,280 --> 00:03:40,230
‫Vì vậy, chúng ta hãy xem xét thành phần kích hoạt của chúng tôi.

47
00:03:40,230 --> 00:03:46,530
‫CP Và tôi sẽ đặt điều này bên dưới thành phần đánh dấu của chúng tôi mà chúng tôi sẽ triển khai thiết lập mover.

48
00:03:46,530 --> 00:03:52,500
‫Chúng tôi sẽ đặt thành phần lớp mà bạn kích hoạt trước đó và thụt lề nó.

49
00:03:53,400 --> 00:03:55,590
‫Bỏ dấu chấm phẩy và thêm dấu ngoặc nhọn.

50
00:03:55,590 --> 00:04:00,150
‫Và về cơ bản tất cả những gì chúng ta sẽ phải làm ở đây, hãy thay đổi tên chỉ trong tệp C ++.

51
00:04:00,150 --> 00:04:06,060
‫Thực ra không quan trọng liệu tên của các tham số có khớp giữa tiêu đề và C ++ hay không.

52
00:04:06,060 --> 00:04:12,540
‫Vì vậy, chúng tôi có thể thay đổi nó ở đây và nói rằng người dẫn đường mới là thứ sắp tới để thiết lập người dẫn đường.

53
00:04:12,630 --> 00:04:20,010
‫Và do đó, chúng ta có thể đặt biến cục bộ của mình, trình chuyển đổi biến lớp của chúng ta bằng với trình chuyển đổi mới như thế.

54
00:04:20,010 --> 00:04:27,030
‫Vì vậy, bây giờ điều khá quan trọng là bạn không được bỏ qua bước đổi tên này vì nếu tham số

55
00:04:27,030 --> 00:04:33,840
‫đầu vào trùng tên với một trong các biến trên lớp, thì không thực theo mặc định sẽ đặt đó là

56
00:04:33,840 --> 00:04:34,170
‫lỗi.

57
00:04:34,170 --> 00:04:39,720
‫Nó được gọi là shadowing và Unreal không muốn bạn làm điều đó, vì vậy bạn cần đảm bảo rằng bạn đặt tên tham số

58
00:04:39,720 --> 00:04:44,970
‫của mình khác với biến ngay bây giờ vì các hàm mới này không phải lúc nào cũng hiển thị với các thay

59
00:04:44,970 --> 00:04:46,260
‫đổi mã hóa trực tiếp.

60
00:04:46,260 --> 00:04:52,290
‫Tôi sẽ đóng trình biên dịch lại từ mã Visual Studio và sau đó khởi chạy lại từ dự án

61
00:04:52,290 --> 00:04:52,920
‫mới.

62
00:04:52,950 --> 00:04:58,950
‫Bây giờ chúng ta hãy chuyển đến ngăn chứa nội dung, mở bản thiết kế bức tường bí mật của chúng ta

63
00:04:58,950 --> 00:05:06,080
‫và sau đó từ nút Bắt đầu phát của chúng ta trong biểu đồ sự kiện, hãy dừng lại ở đây và tìm kiếm động cơ đã định.

64
00:05:06,090 --> 00:05:08,190
‫Bây giờ nhận thấy có hai tùy chọn ở đây.

65
00:05:08,190 --> 00:05:15,210
‫Một, nó sẽ là thiết lập thành phần còn được gọi là mover, và một là một hàm trên thành phần kích

66
00:05:15,210 --> 00:05:15,750
‫hoạt.

67
00:05:15,750 --> 00:05:18,840
‫Vì vậy, chúng tôi muốn chọn một chức năng trên thành phần kích hoạt.

68
00:05:19,050 --> 00:05:27,120
‫Và sau đó những gì chúng tôi muốn làm là kéo thành phần trình di chuyển của chúng tôi làm các đối số khác cho hàm này và điều đó sẽ thực

69
00:05:27,120 --> 00:05:28,110
‫hiện thủ thuật.

70
00:05:28,110 --> 00:05:31,350
‫Nó thiết lập động cơ khi bắt đầu chơi.

71
00:05:31,350 --> 00:05:37,800
‫Vì vậy, bây giờ về cơ bản những gì chúng ta muốn xảy ra là thành phần kích hoạt của chúng ta

72
00:05:37,800 --> 00:05:41,400
‫phải được thiết lập và thiết lập nên chuyển boolean vào đây.

73
00:05:41,400 --> 00:05:46,110
‫Vì vậy, đó sẽ là thách thức của tôi đối với bạn để tạo ra một số chức năng công cộng trong động cơ và chuyển động.

74
00:05:46,110 --> 00:05:51,780
‫CP Nó phải được đặt, nên di chuyển và nó phải cập nhật biến thuộc tính của bạn.

75
00:05:51,780 --> 00:05:56,970
‫Trên thực tế, bạn có thể đặt nó không phải là một thuộc tính mới nữa vì chúng ta sẽ thiết lập nó thông qua mã ngay

76
00:05:56,970 --> 00:05:59,760
‫bây giờ và sau đó bạn có thể đưa nó vào phần công khai.

77
00:05:59,760 --> 00:06:04,740
‫Nó cần được công khai vì chúng tôi sẽ thử và truy cập nó từ thành phần kích hoạt của chúng tôi.

78
00:06:04,740 --> 00:06:11,850
‫Và bạn có thể gọi nó trên con trỏ động cơ mà chúng tôi đã có trong thành phần kích hoạt từ cài đặt thành phần

79
00:06:11,850 --> 00:06:17,970
‫đánh dấu của nó, boolean thích hợp, cho dù chúng tôi muốn nó mở khóa hay khóa lại, hãy tạm dừng video

80
00:06:17,970 --> 00:06:18,960
‫và bắt đầu.

81
00:06:22,250 --> 00:06:23,690
‫Được rồi, chào mừng trở lại.

82
00:06:23,690 --> 00:06:29,410
‫Vì vậy, tôi sẽ xóa thuộc tính khỏi nếu di chuyển. Tôi sẽ chuyển đến

83
00:06:29,420 --> 00:06:39,800
‫phần công khai ngay dưới thành phần TTIC và tôi sẽ tạo một tập hợp trống sẽ chuyển tham gia vào một boolean mà chúng ta

84
00:06:39,800 --> 00:06:43,010
‫sẽ gọi là di chuyển như vậy.

85
00:06:43,280 --> 00:06:51,560
‫Và sau đó chúng ta sẽ thực hiện điều này và chuyển sang CP di chuyển và triển khai nó, thay

86
00:06:51,560 --> 00:07:00,920
‫thế dấu chấm phẩy, thêm dấu hai chấm, lớp dấu hai chấm và về cơ bản, chúng ta có thể gọi đây là CP mới

87
00:07:00,920 --> 00:07:08,030
‫nên di chuyển và chúng ta có thể nói rằng nên di chuyển bằng mới nên di chuyển.

88
00:07:08,030 --> 00:07:12,860
‫Bây giờ bạn có thể tự hỏi, tại sao chúng ta không làm cho chính các biến có thể truy cập công khai để

89
00:07:12,860 --> 00:07:14,660
‫chúng ta có thể đặt chúng trực tiếp?

90
00:07:14,780 --> 00:07:22,520
‫Điều đó thường không tốt trong C ++ vì nếu bạn để ai đó thay đổi các biến của mình, bạn sẽ không bao giờ biết điều

91
00:07:22,520 --> 00:07:24,620
‫gì có thể xảy ra với họ.

92
00:07:24,620 --> 00:07:32,090
‫Trong khi nếu bạn có một phương thức ở đó để làm điều đó cho bạn, thì nó cho phép bạn sau này thay đổi cách bạn cấu trúc các

93
00:07:32,090 --> 00:07:38,240
‫biến bên trong mà không cần phải thay đổi các hàm công khai của mình, có nghĩa là bạn phải thực hiện ít cập nhật

94
00:07:38,240 --> 00:07:39,920
‫hơn cho các lớp khác nhau.

95
00:07:39,920 --> 00:07:46,070
‫Vì vậy, theo quy tắc, chúng ta luôn sử dụng setters và getters nếu chúng ta cần truy cập các biến trong các

96
00:07:46,070 --> 00:07:46,850
‫lớp khác.

97
00:07:46,850 --> 00:07:52,100
‫Vì vậy, bây giờ chúng ta đã tạo ra chức năng mới đó, chúng ta hãy xem xét CP thành phần trig, nơi chúng ta hiện có

98
00:07:52,100 --> 00:07:53,570
‫các thông báo nhật ký của mình.

99
00:07:53,570 --> 00:08:01,670
‫Những gì chúng tôi muốn làm là truy cập con trỏ động cơ của chúng tôi, vì vậy chúng tôi sẽ làm cho bộ mũi tên của động cơ phải di chuyển.

100
00:08:01,670 --> 00:08:06,140
‫Và trong trường hợp chúng tôi có một diễn viên có thể chấp nhận được, điều đó phải đúng.

101
00:08:06,140 --> 00:08:08,600
‫Chúng ta nên di chuyển dấu chấm phẩy ở cuối dòng.

102
00:08:08,690 --> 00:08:12,200
‫Và trong trường hợp khác, thì chúng ta có lẽ không nên.

103
00:08:12,200 --> 00:08:20,510
‫Vì vậy, chúng ta sẽ di chuyển tập hợp mũi tên sẽ di chuyển và trong dấu ngoặc đơn đặt false, hãy xóa bỏ R thừa mà tôi có

104
00:08:20,510 --> 00:08:26,780
‫ở cuối phương thức của mình và hãy biên dịch lại ngay bây giờ trong trường hợp này vì tôi chỉ thêm

105
00:08:26,780 --> 00:08:30,020
‫hàm này vào C ++ và nó không thể gọi được.

106
00:08:30,020 --> 00:08:34,940
‫Tôi không nghĩ rằng tôi thực sự cần phải khởi động lại trình chỉnh sửa để chức năng này hoạt động, đóng nhật

107
00:08:34,940 --> 00:08:39,530
‫ký đầu ra của chúng tôi, đi về phía gargoyle của chúng tôi và bắt đầu chơi và đón anh ta.

108
00:08:39,770 --> 00:08:49,400
‫Hãy ra khỏi cái lồng này và cắm nó vào trong hốc tường và chúng đi, Nó đang di chuyển xuống, nhưng nó sẽ dừng lại

109
00:08:49,400 --> 00:08:56,600
‫ngay khi gargoyle rơi ra, điều này không lý tưởng vì gargoyle không thực sự được giữ cố định và

110
00:08:56,600 --> 00:08:59,060
‫tường thì không. hoàn toàn xuống.

111
00:08:59,150 --> 00:09:03,020
‫Và bởi vì nó mô phỏng vật lý, nó sẽ bật ra khỏi cái hốc tường đó, phải không?

112
00:09:03,020 --> 00:09:10,580
‫Vì vậy, những gì chúng ta cần làm là đảm bảo một khi chúng ta thả nó vào khu vực kích hoạt của mình, nó sẽ cố định ở đó

113
00:09:10,580 --> 00:09:11,780
‫và chỉ ở lại.

114
00:09:11,780 --> 00:09:14,210
‫Vì vậy, đó sẽ là chủ đề của bài giảng tiếp theo.

115
00:09:14,210 --> 00:09:15,200
‫Tôi sẽ gặp bạn ở đó.

