﻿1
00:00:04,370 --> 00:00:05,660
‫Merhaba ve hoş geldiniz.

2
00:00:05,660 --> 00:00:13,910
‫Bu derste, Unreal'da C++ dosyalarının derlenmesi ile ilgili ana adımları anlayacağız.

3
00:00:13,910 --> 00:00:16,070
‫Nasıl çalıştıklarına bir bakalım.

4
00:00:16,850 --> 00:00:24,020
‫Yani yakında dışarıdan, diğer dosyalardan kod kullanmaya başlamamızın zamanı gelecek ve bunun C++'da nasıl

5
00:00:24,020 --> 00:00:26,750
‫çalıştığını öğrenmemiz gerekiyor.

6
00:00:26,750 --> 00:00:31,220
‫Bunu yapmak için, biraz dolambaçlı bir yoldan gitmemiz ve C++ kodumuzu ikili dosyaya

7
00:00:31,220 --> 00:00:35,270
‫derlerken neler olduğunu daha ayrıntılı olarak anlamamız gerekir.

8
00:00:35,270 --> 00:00:38,690
‫İşte kullanılan derleme adımları.

9
00:00:38,690 --> 00:00:44,780
‫Kodunuzla, C++ dosyalarınızla, başlık dosyalarınızla, hepsi çeşitli metin dosyalarında başlarız.

10
00:00:44,780 --> 00:00:49,070
‫Bunlar Unreal Header Tool adı verilen bir araca aktarılır.

11
00:00:49,070 --> 00:00:56,270
‫Şimdi, bu araç tüm gerçek dışı özel sözdizimi parçalarını almaktan ve bunları daha fazla C++ kodu oluşturmak

12
00:00:56,270 --> 00:00:58,760
‫için kullanmaktan sorumludur.

13
00:00:58,760 --> 00:01:05,570
‫Şimdi bu unreal'a özgü sözdizimine sahip olduğumuz bazı örneklere bir göz atalım; büyük harflerle

14
00:01:05,570 --> 00:01:13,700
‫yazılmış bu yeni sınıf unreal'a özgü sözdizimidir ve buradaki Crypt Reader API şeyi ve buradaki oluşturulmuş gövde

15
00:01:13,700 --> 00:01:15,380
‫de öyledir.

16
00:01:15,410 --> 00:01:21,830
‫Ve temelde burada olan şey, unreal header aracının kodunuzdaki bu farklı sözdizimi parçalarını görmesi ve

17
00:01:21,830 --> 00:01:24,500
‫tamam, işimi yapmam gerekiyor demesidir.

18
00:01:24,500 --> 00:01:27,020
‫Oraya girip bir sürü şey eklemem gerekiyor.

19
00:01:27,050 --> 00:01:34,670
‫Oluşturulan gövdenizi Unreal kullanırken hayatımızı kolaylaştıran bir grup kodla değiştirecek.

20
00:01:35,090 --> 00:01:38,300
‫Ayrıca U özellikleri ve yeni işlevler gibi şeyler de yapar.

21
00:01:38,300 --> 00:01:43,580
‫Plan dünyasıyla iletişim kurabilmesi için ihtiyaç duyduğu her şeyi ekler.

22
00:01:43,580 --> 00:01:45,020
‫Yani bu ilk adım.

23
00:01:45,020 --> 00:01:49,250
‫Tüm gerçek dışı özel öğelerini gerçek C++'a dönüştürür.

24
00:01:49,490 --> 00:01:55,880
‫Gerçek C++'ı elde ettikten sonra, bunu üç adımdan oluşan standart bir C++ derleme sürecine

25
00:01:55,880 --> 00:01:57,260
‫sokabiliriz.

26
00:01:57,260 --> 00:02:04,790
‫Birincisi, ön işleme adımıyla ilgilenmektir, böylece bu aslında C++ sözdiziminin herhangi birine dokunabilir ve aslında yalnızca

27
00:02:04,790 --> 00:02:07,610
‫bir karma ile başlayan satırlarla ilgilenir.

28
00:02:07,610 --> 00:02:10,850
‫Yani bu ön işleme yönergelerinden birkaç tanesine sahibiz.

29
00:02:10,850 --> 00:02:13,400
‫Bunlar önişlemci tarafından ele alınır.

30
00:02:14,150 --> 00:02:16,820
‫Bir sonraki adım aslında derleyici dediğimiz şeydir.

31
00:02:16,850 --> 00:02:24,680
‫Bir kodu alır ve çalıştırılabilir ikili dosyaya dönüştürür, ancak adımı tam olarak tamamlamaz çünkü bunu

32
00:02:24,680 --> 00:02:31,790
‫yalnızca çeviri birimleri olarak bilinen bireysel C++, temelde C++ dosyaları üzerinde yapar.

33
00:02:31,790 --> 00:02:37,910
‫Yani bir C++ dosyasını alır ve bunu her bir C++ dosyası için ayrı ayrı ikili dosyaya çevirir.

34
00:02:37,910 --> 00:02:44,360
‫Üçüncü adım ise tüm bunları bir araya getiren ve aslında tek bir yürütülebilir dosyayı çalıştırabileceğimiz bir yürütülebilir

35
00:02:44,360 --> 00:02:47,090
‫dosya çıktısı veren bağlayıcıdır.

36
00:02:47,180 --> 00:02:53,780
‫Şimdi bu standart derleme adımlarını örnek bir dosya ile biraz daha ayrıntılı olarak inceleyelim.

37
00:02:53,840 --> 00:02:55,970
‫Bir oyunumuz olduğunu hayal edin.

38
00:02:56,150 --> 00:03:02,420
‫CP Ve bu çok ama çok basit bir oyun çünkü tek yaptığı bir ve birleri toplamak, ancak bir ve birleri

39
00:03:02,420 --> 00:03:08,540
‫toplamak için matematikte farklı bir dosyada bildirilen bir işlevi kullanmak gerekiyor.

40
00:03:08,780 --> 00:03:10,700
‫H Yani matematik öyle diyor.

41
00:03:10,700 --> 00:03:14,090
‫AD, ama aslında ne yaptığını tanımlamıyor.

42
00:03:14,090 --> 00:03:16,010
‫Yani matematikte bu iş bitti.

43
00:03:16,190 --> 00:03:19,520
‫CP Ve bunun gerçekten de çok basit bir uygulama olduğunu görebilirsiniz.

44
00:03:20,000 --> 00:03:22,700
‫Şimdi önişlemci adımında ne oluyor?

45
00:03:22,700 --> 00:03:28,610
‫Dediğim gibi, bir hash ile başlayan önişlemci yönergeleri ile ilgilenir.

46
00:03:28,610 --> 00:03:34,970
‫Yani karma matematik içerir, bu da temelde matematikteki her şeyi buraya kopyalayın anlamına gelir.

47
00:03:34,970 --> 00:03:40,700
‫Yani yaptığı şey, bu iki dosyayı almak ve bunları birleştirerek Game I adında yeni

48
00:03:40,700 --> 00:03:48,050
‫bir çıktı dosyası oluşturmaktır. temelde games include ve Master H'den tanımın dahil edildiğini ve hash

49
00:03:48,050 --> 00:03:52,730
‫önişlemci direktifinin yerini aldığını görebilirsiniz.

50
00:03:52,730 --> 00:04:03,180
‫Şimdi Game II'nin ADD işlemi için bir tanımı var ve ardından ön işlemciyi matematik DHCP üzerinde çalıştırıyoruz.

51
00:04:03,200 --> 00:04:07,760
‫Ancak herhangi bir önişlemci yönergesi olmadığından, temelde hiçbir şey değiştirilmez.

52
00:04:08,060 --> 00:04:12,890
‫Bir sonraki adım olan derleme, muhtemelen en önemli ve karmaşık

53
00:04:12,890 --> 00:04:21,350
‫adımdır, çünkü yaptığı şey, her bir dosyadaki C++'ı alıp ikiliye dönüştürmektir, ancak bu tam bir ikilik değildir,

54
00:04:21,350 --> 00:04:28,820
‫çünkü örneğin, oyunum aslında AD'nin nasıl uygulanacağını bilmiyor, sadece bu ekleme işlevinin

55
00:04:28,820 --> 00:04:30,620
‫şeklini biliyor.

56
00:04:30,620 --> 00:04:34,940
‫Dolayısıyla bunun daha sonra doldurulması gerekir ve bu da bağlayıcı tarafından doldurulur.

57
00:04:34,940 --> 00:04:41,150
‫Yani bağlayıcı, oyun obj dosyası için oluşturulan ikiliyi ve ana dosya için oluşturulan ikiliyi alacak

58
00:04:41,150 --> 00:04:44,810
‫ve bir oyun yapmak için bunları bir araya getirecektir.

59
00:04:45,020 --> 00:04:52,010
‫XY, her ikisinin ikili dosyasını birleştirir ve son olarak, ihtiyaç duyduğu her şeyin tanımına sahip olduğu için gerçekten çalıştırabileceğimiz

60
00:04:52,010 --> 00:04:55,280
‫eksiksiz bir yürütülebilir dosyadır.

61
00:04:55,280 --> 00:04:58,730
‫Şimdi, neden bu kadar karmaşık bir sürecimiz var?

62
00:04:58,730 --> 00:05:03,860
‫Buradaki fikir, derleme süremizi hızlandırmasıdır çünkü eğer sadece bir değişiklik yaparsam.

63
00:05:04,310 --> 00:05:06,470
‫DHCP ile oynamak için.

64
00:05:06,710 --> 00:05:10,340
‫Aslında tüm derleme sürecini çalıştırmama gerek yok.

65
00:05:10,340 --> 00:05:16,730
‫Tek yapmam gereken oyun DHCP'sini içeren bitleri çalıştırmak, bu yüzden ön işlemciyi sadece CP'de çalıştıracağım,

66
00:05:16,760 --> 00:05:23,660
‫sonra derleyiciyi sadece oyunda çalıştıracağım ve daha önce math obj dosyasını tekrar kullanabilirim.

67
00:05:23,660 --> 00:05:26,960
‫Yeniden derlememe gerek yok çünkü bu konuda hiçbir şey değişmedi.

68
00:05:26,960 --> 00:05:33,590
‫Benzer şekilde, yalnızca matematik nokta CP'yi değiştirirsem, oyun obj dosyasını yeniden derlemem gerekmez, bu yüzden

69
00:05:33,590 --> 00:05:37,640
‫bu daha verimli bir işlemdir ve ilk etapta bunu yapmamızın nedeni budur.

70
00:05:37,640 --> 00:05:44,630
‫Bu yüzden küçük bir deney yapmamızı ve neden bir H dosyasını içeri taşıyıp bir CP dosyasını taşıdığımızı anlamaya

71
00:05:44,630 --> 00:05:46,280
‫çalışmamızı istiyorum.

72
00:05:46,280 --> 00:05:47,750
‫Bunun sebebi nedir?

73
00:05:47,750 --> 00:05:51,770
‫Neden C++ dosyasını taşınmadan derleyemiyoruz?

74
00:05:51,770 --> 00:05:56,660
‫H Yani yapacağımız deney, hash include satırını yorumlayarak çıkarmak olacak.

75
00:05:56,660 --> 00:06:02,000
‫Bu nedenle, bu satırın önünde bir yorum yapmak için çift ileri eğik çizgi kullanmak, temelde önişlemcinin

76
00:06:02,000 --> 00:06:08,060
‫dosyanın içeriğiyle değiştirmesi yerine önişlemci tarafından çıkarılmasını sağlayacaktır.

77
00:06:08,510 --> 00:06:15,050
‫Daha sonra yeniden derleyeceğiz ve çıkan hata mesajlarına bir göz atmanızı ve bu hareketi ne için dahil ettiğimizi

78
00:06:15,050 --> 00:06:21,110
‫anlamaya çalışıp çalışamayacağınızı görmek için ne yazdığını görmenizi istiyorum.

79
00:06:21,260 --> 00:06:23,450
‫Videoyu duraklatın ve deneyin.

80
00:06:26,590 --> 00:06:27,030
‫Tamam.

81
00:06:27,040 --> 00:06:28,000
‫Tekrar hoş geldiniz.

82
00:06:28,030 --> 00:06:33,280
‫Bu yüzden bu satırın başına çift ileri eğik çizgi koyalım, bu da temelde onu geçersiz

83
00:06:33,280 --> 00:06:33,870
‫kılar.

84
00:06:33,880 --> 00:06:40,450
‫Ve sonra bir kontrol alt f 11 yapacağız ve canlı kodlamanın çıktısına bir göz atacağız.

85
00:06:40,450 --> 00:06:44,680
‫Bakın, çok ama çok erken bir dönemde bazı hatalar yaptık.

86
00:06:44,680 --> 00:06:51,160
‫Ve söylediği şey, siz taşıyıcının bir sınıf veya ad alanı olmadığı ve burada başka şeyler olduğu.

87
00:06:51,160 --> 00:06:56,050
‫Birincil teknoloji bileşeninin bildirilmediğini, super'in bir sınıf veya ad alanı olmadığını, get owner'ın

88
00:06:56,050 --> 00:06:58,360
‫bilinmeyen bir tanımlayıcı olduğunu söylüyor.

89
00:06:58,360 --> 00:07:03,940
‫Ve temelde bunun söylediği şey, burada taşıyıcıdan bahsettiniz, ancak onu hiçbir yerde tanımlamadınız,

90
00:07:03,940 --> 00:07:05,920
‫hiçbir yerde beyan etmediniz.

91
00:07:05,920 --> 00:07:07,240
‫Yani bilemiyorum.

92
00:07:07,240 --> 00:07:11,560
‫C++ derleyicisi bunun ne olduğunu bilmediğini söylüyor.

93
00:07:11,560 --> 00:07:18,250
‫İşte bu yüzden H taşıyıcısı da dahil olmak üzere hash yapıyoruz çünkü H taşıyıcısı sınıfı bildiriyor.

94
00:07:18,250 --> 00:07:25,780
‫U taşıyıcının bir sınıf olduğunu ve sizden bir bileşen olarak türediğini ve bu yöntemlere sahip olduğunu vs. söylüyor.

95
00:07:25,780 --> 00:07:28,480
‫O sınıf olmanın ne anlama geldiğini ilan ediyor.

96
00:07:28,480 --> 00:07:32,440
‫Dolayısıyla, bu bildirim olmadan C++ derleyicisi devam edemez.

97
00:07:32,440 --> 00:07:36,160
‫İşte bu yüzden bu başlık dosyasını eklememiz gerekiyor.

98
00:07:36,760 --> 00:07:37,240
‫Harika bir şey.

99
00:07:37,240 --> 00:07:44,920
‫Umarım şimdi C++ derlemenin ve özellikle Unreal'da C++ derlemenin içerdiği süreci biraz

100
00:07:44,920 --> 00:07:47,890
‫daha iyi anlamışsınızdır.

101
00:07:47,920 --> 00:07:49,810
‫Bir sonraki derste görüşmek üzere.

