﻿1
00:00:04,370 --> 00:00:05,660
‫Xin chào và chào mừng.

2
00:00:05,660 --> 00:00:13,250
‫Trong bài giảng này, chúng ta sẽ tìm hiểu các bước chính liên quan đến việc biên dịch tệp C ++ trong

3
00:00:13,250 --> 00:00:13,910
‫Unreal.

4
00:00:13,910 --> 00:00:16,070
‫Hãy đi sâu vào và xem chúng hoạt động như thế nào.

5
00:00:16,850 --> 00:00:24,020
‫Vì vậy, sẽ sớm đến lúc chúng ta bắt đầu sử dụng mã từ bên ngoài, từ các tệp khác và chúng ta cần tìm hiểu cách

6
00:00:24,020 --> 00:00:26,750
‫thức hoạt động của điều này trong C ++.

7
00:00:26,750 --> 00:00:31,220
‫Để làm được điều đó, chúng ta cần đi đường vòng một chút và hiểu chi tiết hơn điều

8
00:00:31,220 --> 00:00:35,270
‫gì đang xảy ra khi chúng ta biên dịch mã C ++ của mình thành nhị phân.

9
00:00:35,270 --> 00:00:38,690
‫Vì vậy, đây là các bước biên dịch được sử dụng.

10
00:00:38,690 --> 00:00:44,780
‫Chúng tôi bắt đầu với mã của bạn, tệp C ++ của bạn, tệp tiêu đề của bạn, tất cả trong các tệp văn bản khác nhau.

11
00:00:44,780 --> 00:00:49,070
‫Chúng được đưa vào một công cụ có tên là Unreal Header Tool.

12
00:00:49,070 --> 00:00:56,270
‫Bây giờ, công cụ này chịu trách nhiệm lấy tất cả các phần cú pháp cụ thể không có thực và sử dụng

13
00:00:56,270 --> 00:00:58,760
‫chúng để tạo thêm mã C ++.

14
00:00:58,760 --> 00:01:05,570
‫Vì vậy, chúng ta hãy xem một số ví dụ về nơi chúng ta có cú pháp cụ thể không thực

15
00:01:05,570 --> 00:01:13,700
‫này, lớp mới này được viết hoa là cú pháp cụ thể không thực, và API Crypt Reader ở đây và phần thân được tạo

16
00:01:13,700 --> 00:01:15,380
‫ở đó cũng vậy.

17
00:01:15,410 --> 00:01:21,830
‫Và về cơ bản những gì đang diễn ra ở đây là công cụ tiêu đề không thực sẽ thấy những phần cú pháp khác nhau này trong mã của bạn và

18
00:01:21,830 --> 00:01:24,500
‫bắt đầu, được rồi, tôi cần phải làm công việc của mình.

19
00:01:24,500 --> 00:01:27,020
‫Tôi cần phải vào đó, tôi cần thêm một đống thứ.

20
00:01:27,050 --> 00:01:33,800
‫Nó sẽ thay thế phần thân đã tạo của bạn bằng một loạt mã giúp cuộc sống của chúng ta dễ dàng hơn khi

21
00:01:33,800 --> 00:01:34,670
‫sử dụng Unreal.

22
00:01:35,090 --> 00:01:38,300
‫Nó cũng thực hiện những thứ như thuộc tính U và các chức năng mới.

23
00:01:38,300 --> 00:01:43,580
‫Nó bổ sung tất cả những thứ cần thiết để có thể giao tiếp với thế giới bản thiết kế.

24
00:01:43,580 --> 00:01:45,020
‫Vì vậy, đó là bước đầu tiên.

25
00:01:45,020 --> 00:01:49,250
‫Nó chuyển đổi tất cả những thứ cụ thể không có thực của nó thành C ++ thực tế.

26
00:01:49,490 --> 00:01:55,880
‫Khi chúng ta đã có C ++ thực, sau đó chúng ta có thể đưa nó vào quy trình biên dịch C ++ tiêu chuẩn, quy trình

27
00:01:55,880 --> 00:01:57,260
‫này thực hiện ba bước.

28
00:01:57,260 --> 00:02:04,790
‫Đầu tiên là xử lý bước tiền xử lý để bước này thực sự có thể chạm vào bất kỳ cú pháp C ++ nào và thực sự chỉ xử

29
00:02:04,790 --> 00:02:07,610
‫lý với các dòng bắt đầu bằng một hàm băm.

30
00:02:07,610 --> 00:02:10,850
‫Vì vậy, chúng tôi có một vài chỉ thị tiền xử lý này.

31
00:02:10,850 --> 00:02:13,400
‫Những điều này được xử lý bởi bộ xử lý trước.

32
00:02:14,150 --> 00:02:16,820
‫Bước tiếp theo là những gì chúng ta thực sự gọi là trình biên dịch.

33
00:02:16,850 --> 00:02:24,680
‫Nó cần một đoạn mã và chuyển nó thành dạng nhị phân có thể thực thi được, nhưng nó không hoàn thành bước này vì nó chỉ

34
00:02:24,680 --> 00:02:31,790
‫thực hiện trên C ++ riêng lẻ, những gì được gọi là đơn vị dịch, về cơ bản là các tệp C ++.

35
00:02:31,790 --> 00:02:37,910
‫Vì vậy, nó cần một tệp C ++ và nó chuyển nó thành tệp nhị phân riêng lẻ, mỗi tệp C ++ riêng lẻ.

36
00:02:37,910 --> 00:02:44,360
‫Và sau đó, bước thứ ba là trình liên kết, mang tất cả những thứ đó lại với nhau và xuất ra một tệp thực thi mà chúng ta

37
00:02:44,360 --> 00:02:47,090
‫thực sự có thể chạy một tệp thực thi duy nhất.

38
00:02:47,180 --> 00:02:52,970
‫Vì vậy, chúng ta hãy xem xét các bước biên dịch tiêu chuẩn này chi tiết hơn một chút với một tệp

39
00:02:52,970 --> 00:02:53,780
‫ví dụ.

40
00:02:53,840 --> 00:02:55,970
‫Vì vậy, hãy tưởng tượng rằng chúng tôi đã có một trò chơi.

41
00:02:56,150 --> 00:03:02,420
‫CP Và đó là một trò chơi rất, rất đơn giản vì tất cả những gì nó làm là thêm một và một với nhau, nhưng

42
00:03:02,420 --> 00:03:08,540
‫để thêm một và một với nhau thì bạn phải sử dụng một hàm được khai báo trong một tệp khác trong phép toán.

43
00:03:08,780 --> 00:03:10,700
‫H Vậy phép toán khai báo.

44
00:03:10,700 --> 00:03:14,090
‫AD, nhưng nó không thực sự xác định những gì nó làm.

45
00:03:14,090 --> 00:03:16,010
‫Vì vậy, điều đó đã được hoàn thành trong toán học.

46
00:03:16,190 --> 00:03:19,520
‫CP Và bạn có thể thấy nó thực sự rất đơn giản.

47
00:03:20,000 --> 00:03:22,700
‫Bây giờ điều gì xảy ra ở bước tiền xử lý?

48
00:03:22,700 --> 00:03:28,130
‫Như tôi đã nói, nó xử lý mọi chỉ thị tiền xử lý, là những thứ bắt đầu bằng một hàm

49
00:03:28,130 --> 00:03:28,610
‫băm.

50
00:03:28,610 --> 00:03:34,970
‫Vì vậy, hàm băm bao gồm toán học, về cơ bản có nghĩa là chỉ cần sao chép mọi thứ bằng toán học vào đây.

51
00:03:34,970 --> 00:03:40,700
‫Vì vậy, những gì nó làm là nó lấy hai tệp này và nó kết hợp chúng với nhau để tạo ra

52
00:03:40,700 --> 00:03:48,050
‫một tệp đầu ra mới có tên là Trò chơi mà tôi về cơ bản là các trò chơi bao gồm và bạn có thể thấy rằng nó được

53
00:03:48,050 --> 00:03:52,730
‫bao gồm định nghĩa từ Master H và nó thay thế chỉ thị tiền xử lý băm.

54
00:03:52,730 --> 00:04:03,180
‫Vì vậy, bây giờ Game II đã có một định nghĩa cho hoạt động ADD và sau đó chúng tôi chạy bộ tiền xử lý trên DHCP toán học.

55
00:04:03,200 --> 00:04:07,760
‫Nhưng vì nó không có bất kỳ chỉ thị tiền xử lý nào nên về cơ bản không có gì thay đổi ở đó.

56
00:04:08,060 --> 00:04:12,890
‫Bước tiếp theo là biên dịch có lẽ là bước quan trọng và phức tạp nhất,

57
00:04:12,890 --> 00:04:21,350
‫bởi vì những gì nó làm là lấy C ++ trong từng tệp riêng lẻ và chuyển nó thành nhị phân, nhưng nó không phải là nhị phân

58
00:04:21,350 --> 00:04:28,820
‫hoàn chỉnh vì ví dụ, trò chơi của tôi không thực sự biết làm thế nào để thực hiện AD, nó chỉ biết hình dạng

59
00:04:28,820 --> 00:04:30,620
‫của chức năng thêm đó.

60
00:04:30,620 --> 00:04:34,940
‫Vì vậy, điều đó cần được điền vào sau và được điền bởi trình liên kết.

61
00:04:34,940 --> 00:04:41,150
‫Vì vậy, trình liên kết sẽ lấy tệp nhị phân được tạo cho tệp obj trò chơi và tệp nhị phân được tạo cho

62
00:04:41,150 --> 00:04:44,810
‫tệp chính và kết hợp chúng lại với nhau để tạo trò chơi.

63
00:04:45,020 --> 00:04:52,010
‫XY kết hợp nhị phân cho cả hai và cuối cùng là một tệp thực thi hoàn chỉnh mà chúng ta thực sự có thể

64
00:04:52,010 --> 00:04:55,280
‫chạy vì nó có định nghĩa cho mọi thứ nó cần.

65
00:04:55,280 --> 00:04:58,730
‫Bây giờ, tại sao chúng ta lại có một quy trình phức tạp như vậy?

66
00:04:58,730 --> 00:05:03,860
‫Ý tưởng ở đây là nó tăng tốc thời gian biên dịch của chúng tôi bởi vì nếu tôi chỉ thực hiện một thay đổi.

67
00:05:04,310 --> 00:05:06,470
‫Để chơi trò chơi DHCP.

68
00:05:06,710 --> 00:05:10,340
‫Tôi thực sự không cần phải chạy toàn bộ quá trình biên dịch.

69
00:05:10,340 --> 00:05:16,730
‫Tất cả những gì tôi phải làm là chạy các bit liên quan đến DHCP trò chơi, vì vậy tôi chỉ chạy bộ tiền xử lý

70
00:05:16,760 --> 00:05:23,660
‫trên CP, sau đó tôi sẽ chỉ chạy trình biên dịch trên trò chơi và sau đó tôi có thể sử dụng lại tệp obj toán học từ trước đó.

71
00:05:23,660 --> 00:05:26,960
‫Tôi không cần phải biên dịch lại nó vì không có gì thay đổi trong đó.

72
00:05:26,960 --> 00:05:33,590
‫Tương tự, nếu tôi chỉ thay đổi CP dot toán học, tôi sẽ không phải biên dịch lại tệp obj trò chơi, đó là lý do tại sao đây là

73
00:05:33,590 --> 00:05:37,640
‫một quy trình hiệu quả hơn và tại sao chúng tôi đang thực hiện nó ngay từ đầu.

74
00:05:37,640 --> 00:05:44,630
‫Vì vậy, tôi muốn chúng tôi thực hiện một thử nghiệm nhỏ và thử và tìm ra lý do tại sao chúng tôi đưa chữ H

75
00:05:44,630 --> 00:05:46,280
‫vào và di chuyển tệp CP?

76
00:05:46,280 --> 00:05:47,750
‫Lý do cho nó là gì?

77
00:05:47,750 --> 00:05:51,770
‫Tại sao chúng ta không thể biên dịch tệp C ++ mà không bao gồm cả tệp đã di chuyển?

78
00:05:51,770 --> 00:05:56,660
‫H Vì vậy, thử nghiệm chúng tôi sẽ thực hiện là chúng tôi sẽ nhận xét ra dòng bao gồm băm.

79
00:05:56,660 --> 00:06:02,000
‫Vì vậy, sử dụng dấu gạch chéo kép để đưa ra nhận xét ở phía trước dòng đó, về cơ bản sẽ

80
00:06:02,000 --> 00:06:07,340
‫làm cho nó bị bộ xử lý loại bỏ thay vì bộ xử lý trước thay thế nó bằng nội dung

81
00:06:07,340 --> 00:06:08,060
‫của tệp.

82
00:06:08,510 --> 00:06:15,050
‫Sau đó, chúng tôi sẽ biên dịch lại và tôi muốn bạn xem các thông báo lỗi xuất hiện và xem nó nói

83
00:06:15,050 --> 00:06:21,110
‫gì để xem liệu bạn có thể thử và hiểu chúng tôi đưa vào động thái này để làm gì không.

84
00:06:21,260 --> 00:06:23,450
‫Tạm dừng video và tiếp tục.

85
00:06:26,590 --> 00:06:27,030
‫Được chứ.

86
00:06:27,040 --> 00:06:28,000
‫Chào mừng trở lại.

87
00:06:28,030 --> 00:06:33,280
‫Vì vậy, hãy đặt một dấu gạch chéo kép về phía trước ở đầu dòng này, về cơ bản làm cho nó

88
00:06:33,280 --> 00:06:33,870
‫vô hiệu.

89
00:06:33,880 --> 00:06:40,450
‫Và sau đó chúng ta sẽ thực hiện điều khiển alt f 11 và chúng ta sẽ xem xét đầu ra của mã hóa trực tiếp.

90
00:06:40,450 --> 00:06:44,680
‫Vì vậy, hãy nhìn xem, chúng tôi đã có một số lỗi ngay từ rất sớm.

91
00:06:44,680 --> 00:06:50,740
‫Và những gì nó đang nói là bạn di chuyển không phải là một lớp hoặc không gian tên và có một số nội dung khác ở

92
00:06:50,740 --> 00:06:51,160
‫đây.

93
00:06:51,160 --> 00:06:56,050
‫Nó nói rằng thành phần công nghệ chính đã không được khai báo rằng super không phải là một lớp hoặc chủ sở hữu

94
00:06:56,050 --> 00:06:58,360
‫không gian tên là một định danh không xác định.

95
00:06:58,360 --> 00:07:03,940
‫Và về cơ bản những gì điều này đang nói là bạn đã nói về bạn động lực ở đây, nhưng bạn chưa định nghĩa nó

96
00:07:03,940 --> 00:07:05,920
‫ở đâu, bạn chưa khai báo nó ở đâu.

97
00:07:05,920 --> 00:07:07,240
‫Vì vậy, tôi không biết.

98
00:07:07,240 --> 00:07:11,560
‫Trình biên dịch C ++ cho biết, tôi không biết đây là gì.

99
00:07:11,560 --> 00:07:18,250
‫Vì vậy, đó là lý do tại sao chúng ta là hash, bao gồm mover H vì mover H khai báo lớp.

100
00:07:18,250 --> 00:07:25,780
‫Nó nói U mover là một lớp và nó bắt nguồn từ việc bạn hành động một thành phần và nó có các phương thức này, v.v.

101
00:07:25,780 --> 00:07:28,480
‫Nó khai báo ý nghĩa của lớp đó.

102
00:07:28,480 --> 00:07:32,440
‫Vì vậy, nếu không có khai báo đó, trình biên dịch C ++ không thể tiếp tục.

103
00:07:32,440 --> 00:07:36,160
‫Và đó là lý do tại sao chúng ta cần đưa vào tệp tiêu đề đó.

104
00:07:36,760 --> 00:07:37,240
‫Công cụ tuyệt vời.

105
00:07:37,240 --> 00:07:44,920
‫Vì vậy, hy vọng bây giờ bạn đã hiểu rõ hơn một chút về quy trình liên quan đến quá trình biên dịch C ++ và đặc

106
00:07:44,920 --> 00:07:47,890
‫biệt là quá trình biên dịch C ++ trong Unreal.

107
00:07:47,920 --> 00:07:49,810
‫Hẹn gặp lại các bạn trong bài giảng tiếp theo.

