"bir yazılımcının not defteri.."

24 Kasım 2010 Çarşamba

Unreal Development Kit (UDK) - İlk Oyun Projemiz



UDK (Unreal Development Kit
) dünyanın en iyi (ve de pahalı) oyun motorlarından biri olan (çoğu kişiye göre en iyisi olan) Unreal Engine 3 ün ücretsiz dağıtılan kısıtlı versiyonudur. Kullanım ve üretim aşamasında bir sorun olmamak ile beraber, para kazanma aşamasında Epic Games in bazı şartları vardır. ancak bu şartlar oyun geliştiricilerin gözünü korkutmamış, bilakis orjinali servet fiyatı olan bu ürünün kısıtlı kullanımlı sürümü dahi bütün dikkatleri üzerine çekmiştir. Kendisini http://www.udk.com/download adresinden indirebilirsiniz.


UDK, özel 3D uygulamaları ve Oyunlar için ihtiyaç duyulabilecek çok geniş çeşitlilikte araçları hizmetimize sunmaktadır. Epic Games tarafından üzerinde şiddetle çalışılan bu teknolojinin şu anda bile dünyanın en iyi 3D oyun motorları arasında gösterilmesi, onun gelecekte de sahanın yıldız oyuncusu olacağını göstermektedir. Sık sık yeni versiyonları düzenli olarak sunulan UDK da yenilikler ile beraber bazı değişikliklerin de oluşması da kaçınılmazdır. Dolayısı ile varolan projemizi yeni çıkan versiyonda çalıştırmaya kalkıştığımızda bazı sorunlar ile karşılaşmamız muhtemeldir. Bu yüzden yeni bir versiyona geçerken önce eski versiyonda herşeyin düzgün çalıştığına emin olup sonra kademe kademe yeni versiyona test ederek geçmek, ve en sonunda da herşeyin düzgün çalıştığına emin olmamız akıllıca olacaktır. Bu denli hızlı geliştirilen bir teknoloji için bu değişiklikler normal karşılanmalıdır.


UDK nın son versiyonunu siteden indirdikten sonra kuruluma başlarken dikkat etmemiz gereken ilk şey kolayca bulabileceğimiz bir yere kurulum yapmamızdır. Çünkü (heleki programlama yapacaksanız) sık sık UDK dizinlerine erişmemiz gerekecek ve onların bulunması zor bir yerde olması işimizi zorlaştıracaktır. Ben C:\UDK şeklinde kurmanızı öneriyorum.

UnrealEditor bir oyun üretimi için ihtiyaç duyabileceğimiz her özelliği görsel bir ortamda bize sunmaktadır. Çok güçlü özelliklerine rağmen UDK nın oldukça makul sistem gereksinimleri vardır.


Oyun tasarım Editörünün arabirimi de 3D yazılımlarına oldukça benzerdir. Elbette kullanımı biraz daha farklı :) Bu makalede oyun tasarım editörüne girmeyeceğim. Olayın alt yapısından bahsedecek ve UDK yı programlamak için temel ayarlamaların nasıl yapılacağından bahsedeceğim. Belki ilerleyen zamanlarda editörün kullanımına dair çalışmalar da yapabiliriz. Ancak bu konu eninde sonunda 3D sanatçılarına daha çok hitap eden bir konu haline dönüşüyor. Ve de bir yazılımcı olarak işin kod tarafı beni daha çok ilgilendiriyor tabiki.


UDK, UnrealScript adı verilen bir script dili ile programlanabilmektedir. Aslında UDK tasarım editörü o kadar gelişmiş bir arabirim ve özellikler sunar ki hiç kod yazmadan dahi oyun üretebilirsiniz. Ama dinamik olarak olaya müdahale etmek isterseniz (ki adam akıllı bir proje oluşturmak için mutlaka isteyeceğiz) UnrealScript ile kod yazarak UDK nın neredeyse her özelliğine realtime müdahale edebileceğiz. UnrealScript, bir script dili olarak literatürde geçmesine rağmen, yazdığımız kodlar derlendiği ve çıktı olarak binary dosyalar oluştuğundan aslında (teorik olarak) programlama dili de diyebiliriz.


UnrealScript güçlü bir kod sistemine sahip olsa bile ciddi bir kod geliştirme ortamı (IDE) den şimdilik yoksundur. İstediğimiz herhangi bir text editörünü kullanabiliriz. Ancak önerilen bir kaç ortam vardır ki bunlardan biri de MS Visual Studio yu UnrealScript komutlarından anlayan hale dönüştürmektir. Ki bir .NET programcısı olarak ben bunu tavsiye ediyorum. Bu iş için nFringe isimli yardımcı progamı kullanıyoruz. Bu program bir modul olarak Visual Studio ya ekleniyor ve ardından VisualStudio muz UnrealScript üretirken de Intellisense (otomatik kod tamamlama), ve anlık hata düzeltme imkanı sunuyor. nFringe normalde ücretli bir yazılım ama ticari olmayan projeler için free. Detaylı bilgi için http://pixelminegames.com/nFringe.aspx adresinden bilgi alabilir ve programı indirebilirsiniz. (Bunun dışında UDK için kullanabilecek başka IDE lere gözatmak isterseniz http://wiki.beyondunreal.com/Legacy:Text_Editor sayfasına da bakabilirsiniz.)


UDK sadece görsel tasarım ortamı değildir aynı zamanda programlanabilir bir yapıdır demiştik. Ve UnrealScript için de OOP destekli bir script (!) dilidir diyebiliriz. OOP özelliklerine ek olarak bazı özel bazı kod yazım şekilleri de eklenmiştir. UnrealScript in syntax yapısına ilerde detaylı olarak değineceğiz. (başka makalelerde)



UDK yı programlamaya başlamadan önce ortam değişkenlerini ayarlamamız gerekir.Bu yüzden dilerseniz dizin yapısına kısaca göz atarak UDK yı keşif turuna çıkalım,



UDK Dizin Yapısı
UDK temel kurulum dizini altında 4 temel dizin bulunur :
  • Binaries

  • Developmens

  • Engine

  • UDKGame 



Binaries:
Oyun tasarım editörü ve aynı zamanda UnrealScript derleyisisi olan UDK.EXE başta olmak üzere UDK yı çalıştıran tüm önemli binary dosyalarımız (exe, dll vs..) burada bulunmaktadır. Bir anlamda UDK nın kensidinin yer aldığı kısımdır diyebiliriz. Binaries in bazı alt klasörlerinde birkaç ek yardımcı programlar da bulunmaktadır, SpeedTreeModeler (ağaç yapım programı) , FaceFXPlugins (3D yazılımlar için yüz çizim plugini), ActorX (3D modelleme yazılımları için bir başka ara plugin). Diğer dizinler UDK nın kendisi ile ilgili. (Win32, Win64, Windows, InstallData vs..)



Development:
Burası projemiz için çok elzem bir bölge. UnrealScript kaynak kodlarımızı yaratacağımız yer burasıdır. Development dizini altında 2 alt dizin göreceksiniz; bunlar Flash ve Src. Flash alt dizininde oyunun giriş menülerini oluşturmak için kullanılacak flash (evet bildiğiniz flash) dosyaları bulunur. SRC alt dizini asıl önemli olan ve UnrealScript lerimizi yazarken sürekli kapısını aşındıracağımız dizindir. Burada zaten UnrealScript için yazılmış (ham halde) çok sayıda kaynak kod dosyası bulunmaktadır. Geliştirme sürecimiz boyunca Development\SRC dizini altına kendi alt dizinimizi yaratıcaz ve kodlarımızı bu alt dizine ekleyeceğiz. bunu yaparken de SRC altındaki diğer kaynak kodlarından bol bol faydalanacağız.



Engine:
Burada UnrealEngine temel dosyalarının kullanabileceği pek çok unsur bulunmaktadır. Şimdilik bu dizinde herhangi bir değişiklik yapmıyoruz. Sadece yaptığımız uygulamalarımızın buradaki dosyaları/özellikleri (Shaders, Contents, Controls vs..) kullanacağını bileceğiz. Engine dizini altındaki dizinlere yüzeysel olarak gözatar isek,
  • Config : Temel konfigürasyon dosyaları içerir. Genellikle UDKGame dizini altındaki konfigürasyon dosyaları ile ilişkilidir ve oradakiler tarafından miras alınır.

  • Content : İçerik paketleri.

  • EditorResources : Editör tarafından kullanılan kaynaklar.

  • Localization : Her dil için ayrı bir localizasyon dosyası içerir. Oyunlarımıza geniş dil desteği verebilmek için.

  • Shaders : Shader özellikleri içeren dosyaları barındırır. Bunları kullanan uygulama daha zangin görüntüleme effektlerine sahip olur.

  • Stats : Rapor yaratmak için şablon dosyaları içerir.

    Şimdilik Engine dizinine pek bir müdahalede bulunmayacağız ama az çok ne olduklarını bilmekte de fayda var.





    UDKGame: Bir diğer önem arz eden dizinimiz de burasıdır. İlk anlamamız gereken şey bu dizinin doğrudan bizim üretmek istediğimiz oyun projesinin dizini olduğudur. Yani buradaki unsurlar doğrudan ya da dolaylı bizim eklediğimiz ya da en azından varlığından haberdar olduğumuz şeyler olmalı. UDK standart olarak bir kaç şeyi yine buraya da ekler. Ama bu dizini bizim kendi bölgemiz olarak düşünmemizde fayda var. Buradaki herşeyin bize özel olacağını da. UDKGame dizininde derlenmiş tüm scriptler ve projemize eklemek istediğimiz tüm içerikler / varlıklar (assets) tutulur. Her bir içerik türüne göre farklı dizinlerde tutulur. Dilerseniz bu dizinlere de yine kısaca gözatalım.

    • Content : XNA ile uğraşmış olanlarınız hatırlayacak ki orada da proje dizinimizde bir content dizini vardı. UDKGame içindeki Content dizini de oyun etaplarına eklenecek tüm paketleri tutar. Bu dizine eklenmiş herhangi bir içeriği oyunumuzda rahatça kullanabiliriz. Leveller, modeller, sesler, özel effectler, haritalar, alınabilir eşyalar, dokular (texture), ve ila oyun için her türlü içerik... Zaten kurulum ile birlikte bize birçok içerik verilmekte. Ama kullanırken lisans koşullarını ihlal etmemeye dikkat edin. Şimdilik pojenizde kullamayacak bile olanız bu içerikleri burada silmeden bırakmanız daha uygun. Çünü ugulama içinde buradaki içerikleri kullanan bimediğimiz kısımlar olabilir. Tek bir satırda bile referans olarak geçse ve biz o içeiği silmiş isek sorun çıkacaktır. Zaten proje bitminde oyunun paketlenmesi aşamasında kullanılacak içerikler bir araya getirlir, kullanılmyan içerikle burada yer alsalar bile çıktı da yer almzlar. Dolayısı ile buradaki dosyaların sıkı takibini yapmak zorunda değiliz. Yani kulanlmyanları belirleyip silmek çok da mühim değildir. Dilerseniz Content dizini altında kendi özel altdizininizi yaratır ve projemizin tüm içeriklerini oraya atarak karışmasını engelleyebilirsiniz. Burada ilk olarak Maps dizini ile tanışık olmakta fayda var. Adından da anlaşılacağı üzere bu dizin Unreal Editör ile yapılan .UDK uzantılı harita dosyalarımızı içine atacağımız yer olacak. Maps in içinde default olarak zaten bir kaç harita doayası olacaktır. Eğer henüz editörde iyi değil isek ilk denemeleri buradaki halihazırdaki harita dosyalarını kullanabiliriz.


    • Script : Derlenmiş script kodlarımızın yer aldığı dizindir. Az önce Development dizininden bahsederken SRC dizini altında kendi dizinimizi yarattığımızı ve açık kaynak kodlarımızı kaynak kodlarımızı orada ürettiğimizi yazmıştım. İşte bu kodlar derlendiğinde UDKGame\Script dizini altında .u uzantısına sahip dosyalar haline gelirler. Buradaki .u dosyalarına bakarsanız artık notepad yada başka bir editörde açılamazlar. Çünkü derlenmiş ve binary dosya haline gelmişlerdir. İşte bu yüzden UnrealScript e tam olarak script demeye gönlüm razı olmuyor :) Çünkü ortaya artık kaynak kodlarından tamamen bağımsız binary dosyalar çıkıyor. Yorumlanmıyor (!), derleniyorlar.. Dolayısı ile UnrealScript de herşey aslında gerçek bir programlama dili gibi işliyor.


    • Localization : Oyunumuzun menüleri ve içindeki mesaj bildirimlerinde kullanacağı dil paketini ayarlıyoruz.


    • Logs : Oyunumuzu gözlemeyip olan bitenin kaydının tutulduğu Log dizini.


    • Movies : Oyunun loading ekranında veyahutta içinde intro olarak göstermek istediğimiz videoları bu dizine (Bink video formatında) ekliyoruz. Bink video ları dosya uzantısı .bik olur ve Movies dizini altında baktığımızda iki adet .bik dosyasının default olarak geldiğini görürüz. Bunlar oyunumuzun çalışmadan hemen önce görüntülenen unreal logosunu gösteren videolardır. Biz kendimizinkileri ekleyebiliriz.


    • Config : Buradaki .ini dosyaları oyunumuz için hayati önem taşımaktadır. Burada iki tür ayar sisteminden sözedebiliriz, default ayar dosyaları ve, detaylandırılmış (materialized) ayar dosyaları. Materialized ayar dosyaları zaman içinde güncellenebilir. Ama sistemin temel ayar dosyaları motor tarafından güncellenmez.


    • Splash : Adına “Splash Screen” dedikleri editör ve oyun başlarken karşımıza çıkan .BMP formatındaki resimlerin yer aldığı dizindir. Default olarak 2 adet UDK ilişikli resim burada bulunur. Biz kendimizinkileri ekleyebiliriz.


    • CookedPC : Cooking işlemini daha üst düzey bir derleme aşaması olarak düşünebiliriz. Hatırlayın ki SRC altındaki dosyalarımız derlenerek .u dosyaları haline geliyordu. Cooking işlemi ise haritalar ile bu kodları ve içerikleri birşeştirerek derlenmiş kullanıma (oynanmaya hazır) sahneler haline getirilirler. İşe bu işleme maruz kalmış içerikler de CookedPC dizininde bulunurlar. Cooking işemi oyunun paketlenip dağıtılmasından bir önceki derleme aşamasıdır. Sahnelerimizin derlenip derlenmediğini bu dizinin içine bakarak kontrol edebiliriz. 





    UnrealScript 
    UnrealScript paketlerinin yönetimini nFringe ya da VisualStudio yapmaz. Tüm bu kod paketlerinin doğru dizinlere yerleşim işini bir manuel olarak kendimiz yapmalıyız. Projemize etki edecek config dosyalarının güncellenmesi (projemize göre modifiye edilmesi) de buna dahildir.

    UDK\Development\src dizini altında zaten birçok alt dizin bulunduğunu farketmişsinizdir. Bunların her biri Classes isimli tek bir alt dizin içerir ve işte onunda altında emrimize amade olarak sunulmuş, çok sayıda UnrealScript sınıflarını içeren kaynak kodları bulunur. İçlerinde yer alan her .uc uzantılı metin dosyası açık bir sınıf (class) tanımı içermektedir. İlerde örneklerini yaptıkça göreceğiz ki tüm bu class kodlarını rahatlıkla kendi uygulamamıza çağırabilir ve kullanabiliriz. Özetlemek gerekirse “Classes” alt dizin ismi olarak UDK da standarttır. Derleyici .uc sınıf tanım dosyalarını burada arar. Classes ismi altındaki .uc dosyalarının her biri sadece bir sınıf tanımı içinde barındırır ve tanımlanan sınıfın ismi .uc dosyasının ismi ile aynı olur.

    SRC altındaki her bir dizin derleme sonrası tek bir dosya haline getirilir. Bu dosya dizin ismi ile aynı adı taşıyan .u uzantılı bir binary dosyadır. Bu dosya UDKGame\Script altında oluşur. (Derlemenin nasıl yapılacağı konusuna daha sonra gelicem.)

    UnrealScript ile UDK oyunlarımıza renk/güç katmaya karar verdiğimizde ilk olarak UDK\Development\src dizini altında kendimize ait bir proje dizini oluşturarak işe başlamalıyız. Dizinin ismi tamamen size kalmış. Ben MyGame isimli bir dizin yarattım. Sonra da (SRC altındaki diğer dizinlerde olduğu gibi) MyGame in altına bir de Classes isimli bir alt dizin açtım. Ki .uc uzantılı class kaynak dosyalarımızı burada yaratacağız.

    UDK nın hemen her noktasına kod ile müdahale edebiliriz. Kullanıma hazır 2000 den fazla sınıf bu yüzden üretilmiş durumdadır. Yeni bir özellik katabileceğiniz gibi varolan özellikleri de değiştirebilirsiniz. İlk olarak default olarak kullanımda olan first person shooter (FPS) kameranın açısını basitçe değiştirerek küçük bir örnek yapacağız. Kaynak kodlarını hazır olarak indirmek için doyaların üzerine tıklayın : MyGameInfo.uc, MyPawn.uc, MyPlayerController.uc

    Buradaki kodlar UDK kullanarak yapılan ciddi projelerden olan TheBall isimli oyunu üretenlerin sitesinde verdikleri makaleye ait. Halihazırda basit bir örnek olduğundan ben de bu makalede aynı kodları kullanıcam. Detaylı bakmak için siteyi ziyaret edebilirsiniz : http://www.theballthegame.com 

    Zip dosyasının içindeki folderi olduğu gibi Development\SRC altına atın. Yani böyle : Development\SRC\MyGame

    Lakin buna rağmen UnrealScript MyGame dizinini derlemeyecektir. Kendisine orada olduğumuzu belirtmek için config dosyalarında bazı küçük ayarlamalar yapmalıyız. UDKGame\Config dizini altında çok sayıdı .ini dosyası bulunmaktadır. Bunlar üretmek istediğimiz oyun ile ilgili çok sayıda ayarların tanımlandığı dosyalardır. Kodlarımız için yapacağımız ayarlama UDKGame\Config\UDKEngine.ini dosyasınındadır. Bu dosyayı herhangi bir metin editöründe açıyoruz. [UnrealEd.EditorEngine] tabı altında bazı EditPackages tanımlamaları göreceğiz. Bunlar default olarak tanımlanmış derleyicinin dikkate alacağı temel UDK paketlerdir. Ve elbette buraya kendi özel paketlerimizi ekleyebiliriz. Bunun için ModEditPackages deyimini kullanacağız. Yukarıda projemize başlarken SRC dizini altına MyGame dizini eklemiştik. İşte o dizini burada ModEditPackages komutu ile UnrealScript derleyicisine tanıtmış oluyoruz.


    [UnrealEd.EditorEngine] 
    ModEditPackages=MyGame
    EditPackages=Core
    EditPackages=Engine
    EditPackages=GFxUI
    EditPackages=GameFramework
    EditPackages=UnrealEd
    EditPackages=GFxUIEditor
    EditPackages=IpDrv
    EditPackages=OnlineSubsystemPC
    EditPackages=OnlineSubsystemGameSpy
    EditPackages=OnlineSubsystemLive
    EditPackages=OnlineSubsystemSteamworks
    ......
    ....
    yani böyle.

    Tekrarlamakta yarar varki Burada yer alan EditPackages ve ModEditPackages deyimleri son derece önem arz eder. Bunlar udk nın kendisinin ve bizim eklediğimiz paketlerin derleme işlemine katılmasını sağlayan tanımlamalardır. Birden fazla mod package tanımı da yapabiliriz. Ama her biri için Development\Src altında ayrı bir dizinimiz olmalı. Paket isimleri de temsil ettiği dizin ismi ile aynı olmalı. Bu tanımlama satırları aynı zamanda derleme işleminden etkilenecek class hiyerarşisini de belirlemiş olur. Ve buradaki sıralama yine çok önemlidir. Çünkü bu hangisinin önce derleneceğini ve yükleneceğine karar veren sıradır. Bazı sınıflar diğerlerine bağlı olduğunu düşünürsek derlemeye yanlış sırada katılan sınıflar hataya sebep olabilir. Sınıflar kavramına daha sonra detayları ile gireceğiz (başka makalelerde).





    Ön Derleme
    Şimdi bir ön derleme yapalım. Bütün derleme işlemlerimizi ve fazlasını Binaries\Win32 (veya win64) altındaki UDK.EXE yapmaktadır. Ama bu komutu konsoldan kullanmak için pek çok parametresini bilmek gerekmektedir. Epic Games bunun için bize fonda buradaki udk.exe yi kullanan ve bunu kolay bir arabirimde yapan bir program hazırlamıştır. UDK kurulumu ile birlikte gelen bu küçük programcığın ismi UnrealFrontEnd dir.





    Programı çalıştırdığımızda Make menüsünden FullREcompile dersek SRC altındaki tüm .uc kodları derlenir. UDKEngine.ini de gerekli ayarlamayı da yaptığımız için FrontEnd artık MyGame dizininden haberdardır. Eğer bir sorun yoksa “succesfull” mesajı ile birlikte UDKGame\Script dizini altında MyGame.u dosyası oluşmuş olmalıdır. Eğer MyGame gibi başka dizinlerimiz de varsa onlar da aynı şekilde dizin ismi ile aynı adı taşıyan .u dosyasına derlenecek ve UDKGame\Script altına konacaktır. (Şayet sorun varsa ModEditPackages=MyGame satırını en alta alıp tekrar deneyin.)

    Bu noktada bilmemiz gereken ilk şey derlenenin sadece sadece kod derlemesinin olduğudur. Yani .u dosyaları sadece kodlarımızın derlenmiş halidir. Ve oyunumuzun diğer içeriklerinden bağımsızdır. Yani kodlarla oyun atmosferini birleştirmek için 2. bir toparlama işlemi daha yapmamız gerekecek. Ki buna da Cooking işlemi diyoruz. Ama cooking işleminden önce de birkaç ayar yapmamız gerekiyor.

    UDK oyunlarında bir de GameType (oyun tipi) kavramı vardır. Oyun tipi denen şey aslında GameInfo sınıfından (ya da Game sınıfları ailesinden yaratılan) özelleştirilmiş bir sınıftır. Oyun tipi oyunun ana hattını (temel sistematiğini belirleyen omurga gibidir ve önemlidir. Geçerli oyun tipini öğrenmek için UDKGame.ini dosyasının içindeki [Engine.GameInfo] tabının altına bakmalıyız. Buradaki ilk satıra dikkat ederseniz :

    DefaultGame=UTGame.UTDeathmatch


    görünüyor. Buradaki ilk kısım yani ‘UTGame’ derleyiciye Development\SRC\UTGame dizinini işaret etmektedir.

    UTDeathmatch’ ifadesi ise bu dizin altında bulunan UTDeathmatch sınıfını işaret ediyor.

    Bütün bunlar ne demek?? şu demek : biz de kendi oyun tipimizi SRC dizini altında yaratabiliriz. Bunun için GameInfo dan yada başka bir oyun sınıfını temel sınıf olarak kullanarak devralma yöntemi ile kendi oyun tipi sınıfımızı yaratabiliriz. UTDeathmatch sınıfını bile devralarak zenginleştirebilir / değiştirebiliriz :)

    Bu arada oyun tipini none olarak da belirterek de varsayılan oyun tipini değiştirmemiz mümkün. Ben bunu denedim ve açıkçası gördüğüm manzara beni pek etkilememişti...

    Şimdi UDKGame\Config\UDKGame.ini içindeki ilgili değişiklikleri yapalım. Değiştireceğimiz satırlar şöyle:

    [Engine.GameInfo]
    DefaultGame=MyGame.MyGameInfo
    DefaultGameType=MyGame.MyGameInfo
    DefaultServerGame=MyGame.MyGameInfo
    PlayerControllerClassName=MyGame.MyPlayerController
    DefaultMapPrefixes= (Prefix=”MG”,bUsesCommonPackage=FALSE,GameType=”MyGame.MyGameInfo”)
    ….................
    …........

    Şimdi ilk olarak oyun tipini ayarlayacağız. Bunun için [Engine.GameInfo] tabına gittiğimizde default oyun tipinin DefaultGame=UTGame.UTDeathmatch olarak ayarlı olduğunu görürüz. Bir çok sebepten dolayı şu aşamada bu oyun modunda oynayamayız. Bu yüzden o satırı
    DefaultGame=MyGame.MyGameInfo
    olarak değiştiriyoruz. Aynı şekilde playercontroller sınıfının tanımlandığı satır olan “PlayerControllerClassName=UTGame.UTPlayerController
    satırını da kendi playercontroller nesnemizi kullanmak için "PlayerControllerClassName=MyGame.MyPlayerController"
    olarak değiştiriyoruz. Son olarak en sona
    DefaultMapPrefixes= (Prefix=”MG”,bUsesCommonPackage=FALSE,GameType=”MyGame.MyGameInfo”) satırını da ekliyoruz.

    Prefix nedir? Prefix programlama literatüründe dosyaları isimlerine göre gruplamanın bir yoludur. İsmin önüne koyduğumuz bir ek kelime ile onları teknik olarak gruplandırır ve bu ek ile teknik işlemlere maruz bırakırız. Az önce DefaultGame.ini ye eklediğimiz son satırda UDK level dosyasının adının “MG” ile başlayacağını derleyiciye .ini dosyasının içinde bildirmiş oluyoruz.

    Artık level oluşturabiliriz. Level oyunun tüm atmosferidir. Yani UDK editöründe üretilen .UDK uzantılı mapler. UDK Editörü bu makalenin konusunun dışında olduğundan şimdilik o konuya girmiyorum. Burada şimdilik basit bir harita üretelim eğer yapamıyorsak varolan haritalardan birini kullanabiliriz. Tüm yapmamız gereken dosyası “MG-ExampleGameLevel.udk” adı ile …\UDKGame\Content\Maps dizinine kaydediyoruz. Dosya adının başındaki MG işte az önce bahsettiğimiz prefix. Yani cooking işleminde bu dosyanın UDKGame.ini dosyasında ayarlanan oyun tipinde olacağını söylüyoruz.

    Şimdi artık Cooking işlemine geçebiliriz. Tekrar Unreal FrontEnd programımıza dönelim ve bu defa Cook menüsünden Full Recook diyelim.






    İşlem başarı ile sonuçlanmış ise artık programımız tamamen derlenmiş, içerikleri birleştirilmiş ve çıktı almaya hazır halde demektir. Kurulum dosyası olarak çıktı almak için son olarak en Sağ taraftaki Package Game buttonunu kullanın. FronEnd kuruluma hazır olarak bir exe üretecektir.

    Hayırlı olsun! :)



    Bir antiparantez olarak şunu da ekliyimki, cooking işleminden sonra haritalarımızı çıktı almadan test etmek isteyebiliriz. Ki doğal olarak isteyeceğiz de. Bunun içinde yine FrontEnd in Launch buttonunu kullanıyoruz.



    Aslında bir haritayı denemek için ille de cooced etmiş olmanız şart değil. Ama gerçek bir deneme yapmak için cooking işleminden sonra sahayı burada denemenizi öneririm.


    UDK dünyasına basitçe girmiş olduk. Daha derinlemesine projeler ve kod örneklerini zaman buldukça üretmeye ve burada paylaşmaya çalışacağım. Bu makale bir ön giriş niteliğinde idi. He türlü fikir / bilgi paylaşımına açığım.

    Saygılarımla,

    (Not : buradak bilgilerin UDK nın yeni versiyonları ile birlikte değişime uğrayabileceğini lütfen dikkate alınız.)

    30 yorum:

    Unknown dedi ki...

    çok başarılı bir anlatım..detaylı ve profosyonel..tebrik edeerim..

    oğuzhanqw dedi ki...

    öncelikle program hakkında bilgi verdiğiniz için teşekkürler ben anadolu meslekte veri tabanı bölümünde okuyorum.kusura bakmayın hemen sadede gelmeliyim udk yı öğrenmek istiyorum gerçekten visual basic biliyorum çok iyi değil tabi ama öle şaşkın şaşkın bakmam en önemlisi öğrenmek istiyorum bana msn adresinizi verebilirseniz çok sevinirim bu arada unrealfrontend e giriyorum script in altında açılan menüden fullrecompile diyorum hata veriyor dediğiniz adımları aynen yerine getirdim ama hata vermeye devam ediyor.verdiği hata şu uygulama düzgün olarak başlayamadı(0xc000007b).sonlandırmak için tamam düğmesine tıklatın.

    unrealfrontend sayfasının alt kısmındaki beyaz boş alandada

    [Oca 28, 3:40 ] COMMANDLET 'UDKMobile.exe make -full' FAILED
    yazıyor yardım ederseniz sevinirim .

    Gökhan ZER dedi ki...

    Sevgili Oğuzhan, ben de senin gibi bu konuya yeni başladım ve her soruna yanıt verebilecek seviyede değilim. En azından şimdilik böyle.

    Ama bahsettiğin hata mesajlarına gözattığımda mesajın UDKMobile.exe den geldiğini görüyorum. UDK.Exe değil. Belkide UDK nın yeni versiyonunda mobile uygulama modunda derlemeye çalışıyor olmayasın?

    yakında 2. makalem gelecek, bu majalke biraz acemice hazırlandı. 2. de daha iyi netliğe kavuşturacağım. Fazla msn kullanmıyorum ama adresim : methodologist@msn.com

    Sevgiler,

    oğuzhanqw dedi ki...

    inanın cevap vermenize çok sevindim bu cevabın 1 aydan önce gelmesini beklemiyordum.ben daha da kurcalıyacağım bu programı umarım 2. makalenizde anlattıklarınızı daha rahat anlarım ilginiz için teşekkürler.çalışmalarınızın devamını sabırsızlıkla bekliyorum

    oğuzhanqw dedi ki...

    kusura bakmıyın yine rahatsız ediyorum ama sabredemedim udk yı kuruyorum en sorunda kurulumun tam sonunda uygulama düzgün olarak başlayamadı(0xc000007b).sonlandırmak için tamam düğmesine tıklatın. hatası veriyor bu nedenlede bir takım şeyleri eksik kuruyor herhalde bu neden olabilirframework ten felansa 3.5 kurulu umarım sabırsızlığımı hoş görürsünüz ama bu işi gerçekten öğrenmek istiyorum

    Gökhan ZER dedi ki...

    Tekrar merhaba Oğuzhan,

    http://forums.epicgames.com/showthread.php?t=730342

    adresinde seninle aynı sorunu yaşayan biri olmuş. Ve Argawaen nikli yetkilinin çözüm önerisi işe yaramış.

    Kısayolu editleyip doğrudan win32 dizine işaret etmesini sağla diyor. bu tür hatalar daha çok yol yanlış ise meydana gelir diyor. Sayfaya bir bir gözat ve dene istersen.

    umarım işe yarar...

    oğuzhanqw dedi ki...

    hemen bakıcam ilgilendiğiniz için teşekkürler.bu arada visual basic bilgim ne kadar işe yarıyacak ve benim gibi bu konuyla ilgilenen sizinde tanıdığınız başkalarıda varmı şimdiden teşekkürler iyi geceler .çalışmalarınızın devamını dilerim.

    oğuzhanqw dedi ki...

    binaries deki udk.exe nin adresini win32 yaptığımda bir kaç saniyelik bir dos ekranı çıktı ve gene bir şey olmadı ama en azında artık hata vermiyor.sizin kullandığınız sürümü hangisi onu indiriyim birde şimdiden ilginiz için teşekkürler iyi geceler

    oğuzhanqw dedi ki...

    çok afedersiniz ben adını değiştirmişim fakat burda ona adres verebileceğim bir yer yok yada ben göremiyorum udk.exe nin adresini nasıl win 32 yapabilirim anlatırsanız sevinirim teşekkürler iyi geceler

    Gökhan ZER dedi ki...

    Sanıyorum bendeki yol şu şekilde : C:\UDK\UDK-2010-10\Binaries\Win32\UDK.EXE

    sendekine uyarlayarak bir dener misin?

    oğuzhanqw dedi ki...

    dediğiniz şekilde yaptım gene aynı hatayı verdi ben eksik indiğini düşünmeye başladım birde sizin kullandığınız versiyonunu indirmeye karar verdim umarım bu sefer tam bir şekilde iner ve işe yarar geç cevap verdiğim için üzgünüm internet bağlantımdaki sorunla uğraşıyordum ilginiz için şimdiden teşekkürler.

    oğuzhanqw dedi ki...

    iyi akşamlar sizin kullandığınız versiyonu indirdim çalışıyor şimdi sölediğiniz uygulamayı tekrar denice milginiz için şimdiden teşekkürler yeni makalenizi sabırsızlıkla bekliyorum bu arada şu sitede bol miktarda programcı var birde udk hakkında bilgisi olduğunu idda eden birinin face adresini yazmamda fayda var diye düşündüm umarım işinize yarar atahan bozkurt yazarsanız face e ona ulaşabilirsiniz iyi akşamlar ilginiz için şimdiden teşekkürler.

    Gökhan ZER dedi ki...

    Teşekkürler Sevgili Oğuzhan, UDK ile ilgilenen herkes bence de bir araya gelmeli. Neden Face de bir grup kurmuyor ve bizleri de ekleyip moderatörlüğünü yapmıyorsun? :)

    oğuzhanqw dedi ki...

    evt haklısınız hemen bir grup kuracağım sizin adınızı facebook ta arattırdım ama bi sonuç bulamadım farklı bir ad mı kullanıyorsunuz bu arada sizin kullandığınız sürümü indirdim udk.exe ve diğerleri çalışıyor ama udklift gene aynı hatayı veriyor ilginiz için şimdiden teşekkürler

    oğuzhanqw dedi ki...

    elimdeki bu sizin kullandığınız sürüm de adk da aynı hatayı vermeye başladı neden böle yapıyor dediğiniz gibi adresinide win 32 yaptım ölede olmuyor hepsi hata veriyor bir tek speed treemoeler ve unreal front end e girebiliyorum diğerlerinin simgesi bile çıkmıyor ilginiz için teşekkürler.

    oğuzhanqw dedi ki...

    visual basic 6.0 kullanıyorum bunu öğrettiler bize bunu kullanmamım udk bakımından bir sakıncası olurmu ilginiz için şimdiden teşekkürler bu arada dediğiniz gibi bir grup kurdum en kısa zamanda sizide görmek isteriz aramızda şu an grupta bir grafikçi var gerçekten bilgili biri internette dersleri var umarım iyi anlaşırsınız facebook ta sizi bulamadım farklı bir isimmi kullanıyorsunuz ilginiz için şimdiden teşekkürler iyi akşamlar.

    Gökhan ZER dedi ki...

    Facebook profil hesabım http://www.facebook.com/profile.php?id=100001326917729 linkinde. Beni ekleyebilirsin. Bulunması bu kadar zor bir hesap olduğunu bilmiyordum, başka bir arkadaşta arayıp bulamadığını söyledi, neden acaba?

    VisualVasic in UDK ya bir zararı yoktur. Ama belki kullandığın windows versiyonu ile UDK pek iyi anlaşamıyor olabilir. Windows 7 kullansan belki çok daha az sorun yaşarsın çünkü ben onu kullanıyorum. Grubuna beni de ekle oradan devam edelim,

    Sevgiler,

    oğuzhanqw dedi ki...

    hatalr devam ediyor bu arada udk da harita yapmayı öğreniyorum yakında bitiricem o hata işinide 2 kere kuruyorum ilkinde hata veriyor 2. cide vermiyor ve 1 gün idare ediyor daha doğru 1 kez girebiliyrum çıkıp girince gene hata veriyor daha önce size bahsettiğim hata grafikçi arkadaş çözmeyi denedi teamviewer la oda çözemedi neyse artık şey dedi bi program engelliyormuş udk yı ama neden virüs programım bile yokki neyse ilginiz için şimdiden teşekkürler.

    oğuzhanqw dedi ki...

    iyi akşamlar ciddi ciddi başladım bu işe lütfen bana oyun yapmam için önce hangi programı öğrenmem gerektiğini sölermisiniz visula basic te kendimi geliştiriyorum ama başka programlarda varmış söleyin c++ diye duydum sizce doğrumum bu arada oop yazınızı okudum öğrenmelimiyim nereden başlamalıyım ilginiz için şimdiden teşekkürler.

    ZeratuL dedi ki...

    Benim merak ettiğim, UDK geleceği olan bir yazılım mı?

    Tamam çok güçlü bir oyun motoru, arkasında Epic var ve lisanslardan iyi gelir elde ediyorlar ama yine de tedirginim bu konuda.

    Belli bir seviyeye gelmek için en azından birkaç senemi harcayacağım. Sonra hop "Hadi çocuklar UDK'nın geliştirmesini durdurduk" demesinler :)

    Şu an orta düzeyde 3dsmax (rig hariç) ve giriş seviyesi C# biliyorum ama oyun konusuna oldukça yabancıyım. Aslında bu yabancılıktan dolayı tedirginim ya :) Vaktimi boşa harcamak istemiyorum açıkçası.

    Diğer taraftan Unity3D için ne düşünüyorsunuz acaba?

    Gökhan ZER dedi ki...

    Selam ZeratuL, öncelikle hoşgelin :)

    Epic en az 10 yıldır bu teknolojiyi geliştiriyor. Tüm bu alt yapıyı başlarda kendisi için üretiyordu. Sonra bu şekilde de ciddi para kazanabileceğini farketti. Ama son zamanlarda bu oyun motoru piyasası fena şekilde kızışmaya başladı. Rekabet kaliteyi getiriyor dolayısı ile.

    Söylediğin şeyler aşağı yukarı hepimizin zihnini meşgul eden ya da etmiş şeyler. Ama şunu söyleyebilirim. Gördüğüm kadarı ile oyun motorlarının temel literatürü aynı. Yani birini çok iyi öğrenirsen oyun alt yapısının genelini artık iyi biliyorsun demektir. en azından kazancın bu genel yapıyı öğrenmek olur yani. Ama UDK sonsuza dek olur mu tabiki Tanrı bilir...

    Unity 3D çok güzel işler çıkarıyor. Ama bana sorarsna onunla belli bir kalıbın dışına çıkılamaz. İstediği kadarucuz olun tavsiye etmiyorum. Geçmişde deli gibi Unity fanatikliği yapanların birçoğu şu anda UDK ya kesin dönüş yapmış durumda. Diğerlerinin de eminim eli kulağındadır :) Bana sorarsan çekilir dert değil Unity..

    Bu arada seni daha yakından tanımak isteriz, oyun konusu ile ilgilenenler olarak bilgi paylaşımını aramızda yaparsak daha kolay öğreniriz diye düşünüyorum.

    Katılımın için teşekkürler,

    HilalAtış dedi ki...

    Gökhan bey biz de UDK kullanarak bir simülasyon hazırlamaya çalışıyoruz. Unreal script üzerinde çalışıyoruz. Sizinle bu konu hakkında fikir alış verişi yapmamız mümkün mü? email adresinizle iletişime geçmemiz mümkün mü

    Gökhan ZER dedi ki...

    çok memnun olurum. az bilinen bir konuda fikir alışverişi herkres için hayırlı olur elbette..

    Oğuzhan Yıldız dedi ki...

    Öncelikle bu program hakkında bilgi vediğiniz için teşekkür ederim..Bişey soracaktım bu UDK'nin Unreal Engine 3 ten çok farkı var mı?Ne gibi kısıtlamalar var?

    Gökhan ZER dedi ki...

    Öncelikle ben katılımınız için teşekkür ederim. Ve evet, UDK da UE3 e oranla daha kısıtlı bir arabirim var. UE3 ün SDK sı (programlama arabirimi) UDK ya oranla çok daha düşük seviyelere inecek şekildedir. Bu da ona çok fazla esneklik sağlar. UDK da ise olay daha derlenip toparlanmış ve daha belli kalıplara / sistematiğe oturtulmuş durumdadır. Bunu da insanları engellemek için değil, yeni oyun yapımcıların daha kolay öğrenmeleri ve daha kolay oyun üretebilmelerine imkan tanımak için yaptıklarını düşünüyorum. Ve nihayetinde UDK daki yapının her türlü oyunu yapmak için şu aşamada fazlası ile yeterli olduğu inancındayım. Ama evet UE3 daha esnek elbette.. Şimdilik kesin sınırları ben de bilmiyorum.

    paylaşımın için tekrar teşekkürler,

    Burak dedi ki...

    Gökhan selam, ayrıca burada yorum yazan diğer arkadaşlara da selamlar. Ben de bir süredir UDK ile uğraşıyorum. Daha çok unrealscript ile vakit geçiriyorum. UT ile başlayan sınıfları kullanmadan bir karakteri ekranda oynatmayı başardım. Ayrıca yine UT ile başlayan classları kullanmadan playerin silah verip yere attırıp yerden aldırabildim. İnternette gördüğüm tüm kaynaklar hep UDK nın kendi sitesinde anlatılan ve başlangıç tadında olan şeyler. Artık bunları geçip gerçekten de kodlama ve grafik anlamında birşeyler yapalım diyorum. Her türlü projeye açığım bilgilerinize.

    Gökhan ZER dedi ki...

    Burak Selam,
    e-mail adresin görünmediği için sana sadece buradan yazabiliyorum. Yoksa özel olarak mail de gönderecektim. Hepsini buradan yazayım o zaman,

    birlikte çalışabiliriz eğer sende istersen ki sanırım istersin de. Dolayısı ile istersen öncelikle tanışalım. Eğer istanbulda isen yüz yüze konuşalım derim. Birlikten kuvven doğarmış :) bana bir mail atarsan konuşmaya oradan devam edebiliriz. Google talk da olabilir, face den de ekleyebilrisin.

    görüşeilmek ümidiyle,

    Gökhan ZER dedi ki...

    martperisi@gmail.com

    Adsız dedi ki...

    Merhaba gökhan bey benim bir sorunum var eklediğim hiç bir şey görünmüyor görünmeyen bir kutu var onun genişliğini yüksekliğini ayarlayabiliyorum ama diğer CSG Add veya başka butonlar çalışmıyor UDK ders videolarına bakarak bir şey yapmak istiyorum ama bu görüntü sorunu yüzünden bir şey yapamıyorum en son sizin bu konunuzda anlattığınız yeni projemide oluşturdum ama yinede sorunum düzelmedi acaba hangi ayarlarda sorun var yardımcı olabilirmisiniz?

    Adsız dedi ki...

    Merhaba gökhan bey benim bir sorunum var eklediğim hiç bir şey görünmüyor görünmeyen bir kutu var onun genişliğini yüksekliğini ayarlayabiliyorum ama diğer CSG Add veya başka butonlar çalışmıyor UDK ders videolarına bakarak bir şey yapmak istiyorum ama bu görüntü sorunu yüzünden bir şey yapamıyorum en son sizin bu konunuzda anlattığınız yeni projemide oluşturdum ama yinede sorunum düzelmedi acaba hangi ayarlarda sorun var yardımcı olabilirmisiniz?