NOT: Bu ders SourceTree‘nin kullanımından ziyade, Unity’de Version Control sistemi kullanmak için neler yapmanız gerek onları anlatmakta. Eğer Version Control ilginizi çekmeyen/ihtiyacınız olmayan bir şeyse bu dersi atlayabilirsiniz.

Hepinize merhabalar,

Bu derste Unity ile SourceTree‘yi beraber kullanırken yapmanız gereken/tavsiye edilen ayarlardan ve Unity’nin Smart Merge isimli yardımcı programının kurulumundan bahsedeceğim. Eğer daha önce bir version control sistemi kullanmadıysanız dersi anlamakta güçlük çekebilirsiniz, bilginize.

Belki bildiğiniz üzere, birden çok kişinin aynı anda üzerinde çalıştığı projelerde, düzenli/kontrollü bir çalışma ortamı için genellikle bir version control sistemi kullanılır. Bu yaz yaptığım staj esnasında ben de bir arkadaşımla beraber bir Unity projesi üzerinde çalıştım ve version control’ü SourceTree+Bitbucket ile sağladık. Ne yalan söyleyeyim çok da memnun kaldık çünkü yaptığımız değişikliklerin bir kısmını kontrollü bir şekilde geri almak zorunda kaldığımızda ya da oyunun birkaç gün önceki versiyonu ile mevcut versiyonunu kıyaslamak istediğimizde bunu yapmak gerçekten de çok kolay oldu.

O halde hazırsanız başlayalım!

Projeyi Oluşturmak

İlk iş olarak Unity projemizi SourceTree’ye tanıtalım. Burada iki seçeneğimiz var: ya yeni bir proje oluşturacağız ya da Bitbucket üzerinde var olan bir projeyi bilgisayarımıza klonlayacağız.

1. Yeni Bir Proje Oluşturmak

Eğer yeni bir proje oluşturuyorsanız, projeyi oluşturduktan sonra projenin olduğu klasöre gidin (içerisinde Assets, Library, ProjectSettings vb. alt klasörlerin olduğu klasör). Şimdi Notepad’i açıp bu klasör içerisinde “.gitignore” adında bir metin dosyası oluşturun. Dikkat edin: bu metin dosyasının bir ismi yok ve uzantısı da “gitignore“. Şimdi bu “.gitignore” dosyasının içerisine şu komutları ekleyin ve dosyayı kaydedin (kaynak: https://github.com/github/gitignore/blob/master/Unity.gitignore):

/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*

# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd


# Unity3D generated meta files
*.pidb.meta

# Unity3D Generated File On Crash Reports
sysinfo.txt

# Builds
*.apk
*.unitypackage

Bu, gereksiz dosyaların Version Control üzerinden senkronize edilmesini engelleyerek hem hızımızı hem de internet kullanımımızı optimize edecek.

Şimdi Unity’de Edit-Project Settings-Editor yolunu izleyin ve Inspector‘da açılan “Editor Settings“ten “Version Control” altındaki “Mode“u “Visible Meta Files“, “Asset Serialization” altındaki “Mode“u ise “Force Text” yapın. Artık projenizdeki asset’ler binary serialization yerine text şeklinde serialize edilecek ve hem yaptığınız değişiklikler SourceTree’de daha okunaklı bir şekilde görünecek hem de büyük bir dosyada yaptığınız ufak bir değişiklik için SourceTree tüm dosyayı tekrar server’a yüklemek zorunda kalmayacak, sadece yaptığınız ufak değişikliği dosyanın üzerine yazması yeterli olacak. İlaveten, Smart Merge için bu değişiklikleri yapmak zorundasınız da zaten.

Artık projeyi SourceTree’ye ekleyebiliriz. Bunun için SourceTree’de File-Clone/New yolunu izleyip gelen pencereden “Create New Repository“e tıklayın ve “Destination Path“ten projenin olduğu klasörü seçin (“Repository Type” kısmı “Git” olarak kalsın). Create butonuna basarak projeyi SourceTree’ye tanıtın. Dosyaları “Stage All” yapıp “Commit” de yaptıktan sonra artık local repository’niz kullanıma hazır!

Eğer proje üzerinde birden çok kişi çalışıyorsa veya projenin bir kopyasını internette tutmak istiyorsanız bu local repository’e bir web sunucusu (remote) tanıtmanız lazım. Bu aşamada biz Bitbucket kullanmıştık çünkü Bitbucket’ta projenizi ücretsiz bir şekilde private yaparak meraklı gözlerden saklama imkanınız bulunuyor. Siz de Bitbucket kullanmak isterseniz önce bir Bitbucket hesabı oluşturun ve ardından Bitbucket üzerinden Repositories-Create Repository ile yeni bir repository oluşturun. Ayarları dilediğiniz gibi yapıp “Create Repository” ile işlemi tamamladıktan sonra “Command line” altındaki “I have an existing project“e tıklayın:

1

Resimde görüldüğü gibi, oradaki kodun 2. satırını kopyalayın. Şimdi SourceTree’de sağ üstteki “Terminal“e tıklayın, konsol gelince boş bir yere sağ tıklayıp Yapıştır (Paste) yapıp kodu yapıştırın ve Enter ile çalıştırın. Artık konsolu kapatıp projeyi Bitbucket’a Push yapabilirsiniz:

2

2. BitBucket Üzerinde Var Olan Projeyi Klonlamak

Projeyi oluştururken bu derste bahsettiğim ayarları yaptığınızı varsayıyorum. Bu durumda tek yapmanız gereken SourceTree’den File-Clone/New yolunu izlemek ve buradaki “Clone Repository” altında yer alan “Source Path / URL“den Bitbucket’taki repository’nizi seçip “Destination Path“ten de projeyi üzerine klonlayacağınız boş bir klasör seçmek.

Smart Merge Kurulumu

Bir proje üzerinde birden çok kişi çalışırken bazen bir sahne veya prefab aynı anda birkaç kişi tarafından düzenlenebilmekte. Bu durumda projeyi Bitbucket üzerinde senkronize ederken genellikle conflict hataları alırız ve yapılan tüm değişiklikleri bir kişinin elle gözden geçirmesi gerekir ki bu gerçekten zahmetli bir şeydir. Unity, bu conflict’leri nispeten azaltmak için Smart Merge isimli bir yardımcı programla beraber gelmekte; ancak bu tool’un çalışması için ufak bir ayar safhası gerekmekte (kaynak: https://www.reddit.com/r/Unity3D/comments/39bdq5/how_to_solve_scene_conflicts_with_unitys_smart/).

İlk iş olarak SourceTree’de Tools-Options yolunu izleyip “Diff” sekmesine geçiş yapın. Burada “Merge Tool” olarak “Custom“u seçin. “Diff Command” kısmına “D:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe” yazın (Unity sizde farklı bir path’te kurulu ise o path’teki “Editor\Data\Tools\UnityYAMLMerge.exe“nin konumunu yazın). “Arguments” kısmına ise “merge -p $BASE $REMOTE $LOCAL $MERGED” yazın ve OK diyerek değişiklikleri kaydedin:

3

Smart Merge sadece scene ve prefab’lar üzerinde çalışmakta. Bunun dışında kalan dosyaları merge etmek için (fallback) dışarıdan bir merge programı kullanmak zorundayız. Bu noktada ben Perforce‘un ücretsiz p4merge uygulamasını kullanıyorum. Siz de bu programı kurmak için https://www.perforce.com/downloads/helix adresine gidip “HELIX P4V: VISUAL CLIENT“ı indirin:

4

Setup dosyasını açtıktan sonra sadece “Visual Merge Tool (P4Merge)“ü kurun:

5

Geriye son bir adım kaldı. Unity’nin kurulu olduğu yerdeki “Data\Tools\mergespecfile.txt” dosyasını açın ve aşağıda vurgulanan değişiklikleri/eklemeleri yapın (p4merge’in path’i sizde farklı ise sizdeki path’i yazın):

# On Windows %programs% is replaced with "C:\Program Files" and "C:\Program Files (x86)" there by resulting in two entries to try out
# On OSX %programs% is replaced with "/Applications" and "$HOME/Applications" thereby resulting in two entries to try out

unity use "D:\Program Files\Perforce\p4merge.exe" "%b" "%l" "%r" "%d"
prefab use "D:\Program Files\Perforce\p4merge.exe" "%b" "%l" "%r" "%d"

#
# Default fallbacks for unknown files. First tool found is used.
#

* use "D:\Program Files\Perforce\p4merge.exe" "%b" "%l" "%r" "%d"

# Apple File Merge

Şu aşamada Smart Merge’ün doğru bir şekilde kurulmuş olması lazım. Ancak gözlemlediğim kadarıyla maalesef ki Smart Merge otomatik olarak çalışmıyor, bir conflict esnasında elle çalışması gerekiyor. Diyelim ki SourceTree üzerinden bir işlem yaparken conflict çıktı ve merge işlemi gerçekleşemedi. Bu durumda yapmanız gereken şey, “Unstaged files” altındaki conflict yapan asset’lere sağ tıklayıp “Resolve Conflicts-Launch External Merge Tool” yolunu izlemek:

6

Bir süre bekledikten sonra ya işlem başarılı olacak ve bir hata mesajı almayacaksınız ya da Smart Merge de merge işlemini yapamayacak ve hata alacaksınız. Bu durumda mecburen conflict yapan dosyaları elle düzenlemek zorundasınız.

NOT: Eğer merge işlemi başarılı olursa conflict’li dosyanın orijinalini kaybetmemek için otomatik olarak “dosya ismi.orig” isminde “orig” uzantılı bir dosya oluşuyor. Ben bu dosyaya sağ tıklayıp “Remove” ile projeden siliyorum çünkü merge işlemi başarılı olduğu için zaten değişiklikler asıl dosyaya yansıyor, eski halinin bir kopyasını tutmaya gerek duymuyorum.

Bu dersin de burada sonuna geldik. Bir sorun yaşarsanız önce sorunu internette aramayı deneyin çünkü version control sistemi konusunda ben de acemi sayılırım. İlaveten, eğer SourceTree nasıl kullanılır bilmiyorsanız internetten tutorial izleyerek/okuyarak Commit/Push/Pull/Merge/Checkout vb. nedir/nasıl kullanılır araştırmanızı şiddetle öneririm.

Bir sonraki derste görüşmek üzere!

yorum
  1. Yasin dedi ki:

    Abivim şuan bir oyun Yapıyorum 3D kamera topu takip ediyor orada sıkıntı yok ama duvarların yanından geçerken duvarın diğer tarafı da görünüyor ne yaptıysam bulamadım yolu bi yardımcı olur musun abi

  2. Metehan Korkmaz dedi ki:

    Hocam benim yazılım bilgim Yok YouTube dışında c# nasıl öğrenebilirim unity için.

    • yasirkula dedi ki:

      Ben zamanında Unity Tutorial diye çok genel bi arama yapıp karşıma gelen tutoriallerden beğendiklerimi izleyerek veya okuyarak ilerledim. Yalnız bu derslerin hemen hepsi İngilizce idi. Türkçe tutorial olarak belki en iyi şansınız bir Unity kitabı alıp okumanızdır. Şu sıralar Unity ile alakalı Türkçe Youtube kanallarının sayısı da arttı gerçi, onları da es geçmemek lazım.

  3. Ahmet dedi ki:

    Hocam ben 2D üzerinden android için localhost olarak multiplayer bir oyun geliştiriyorum fakat şöyle bir sorunum var Playerimin hareketi için kullandığım butonlar sadece oyunu local olarak ilk paylaşan kişi kullanabiliyor oyunu client diyip giren kullanamıyor bunu nasıl aşablilrim ?

    • yasirkula dedi ki:

      Buton çalışıyordur ama butona basınca çalışması gereken fonksiyon sadece oyunu kuran kişide çalışabilecek kodlar içeriyordur. Bu gibi durumlarda, oyuna bağlanan kişinin oyunu kuran kişiye bir fonksiyonu çalıştırması gerektiğini söylemek için, Command’i kullanabilirsiniz.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Log Out / Değiştir )

Connecting to %s