Herhangi bir sürüm kontrolüne sahip olmayan bir Unity projem var ve başka bir geliştiriciyle paylaşmam gerekiyor, böylece her ikimiz de proje üzerinde çalışabiliriz.
Unity Assets ile iyi oynayan hangi stratejiler kullanılmalıdır?
Herhangi bir sürüm kontrolüne sahip olmayan bir Unity projem var ve başka bir geliştiriciyle paylaşmam gerekiyor, böylece her ikimiz de proje üzerinde çalışabiliriz.
Unity Assets ile iyi oynayan hangi stratejiler kullanılmalıdır?
Yanıtlar:
Unity, sürüm kontrolünü doğru bir şekilde desteklemek için yerleşik bir tesise sahiptir.
Sadece Dosya-> Proje Ayarları-> Editöre gidin ve harici versiyon kontrolünü etkinleştirin.
Git'i tavsiye ederim, ücretsiz ve en iyisi.
Bir süre önce blogumda sürüm kontrolü (Git kullanarak) hakkında yazdım.
Uzun lafın kısası:
Harici sürüm kontrolünü etkinleştirin Dosya-> Proje Ayarları-> Düzenleyici ve depodaki gereksiz şeyleri önlemek için .gitignore dosyasını oluşturun (bu gerçekten gerekli değildir, ancak geliştirme sırasında paha biçilmez olacaktır).
Dosyanın nasıl görünmesi gerektiği:
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
Birlik projeleri için ben kullanımı ancak birkaç ihmaller ile: [Bb]uild/
, *.booproj
, sysinfo.txt
. Kullandığımın GitHub'ın Unity için yeni repo şablonlarına ( github.com/github/gitignore/blob/master/Unity.gitignore ) herhangi bir Objective-C ( iOS'u hedeflerken ) dayandığından eminim .
Unity 3.0, subversion ile iyi oynayacak şekilde yapılandırılmış. (En azından öncekinden daha güzel) Bunun sadece profesyonel sürümde olup olmadığını bilmiyorum, kontrol etmem gerekecek.
Genel olarak, en önerilen sürüm kontrol sistemi Unity Asset Server'dır.
Birliğe özgü - her zaman farklı sahneler ve farklı kod dosyaları üzerinde çalışın ve diğer kişinin değişikliklerini manuel olarak birleştirin. İkinizin de aynı sahnede çalışması gerekiyorsa, kopyalayın ve kopyayı test olarak kullanın. Aksi takdirde, her ikisi de aynı sahneyi değiştirirseniz, bir kişinin değişiklikleri diğerinin üzerine yazacaktır. Kaynak dosyalarınız için kaynak kontrolünü hala kullanabilirsiniz, oluşturulduktan sonra dosya sisteminde veya Unity aracılığıyla dosyalarınızı dolaştırmayın.
Başlangıç tavsiyesi - kendinize iyi bir fark / birleştirme aracı edinin ( WinMerge'i severim ) ve diğer kişinin ne değişiklik yaptığını görmek ve çakışan dosyalardaki değişiklikleri elle birleştirmek için kullanmaya alışın. Örneğin merkezi bir dokümantasyon alanı kurun. bir Google yazılı belge veya wiki ve belgelerinizi orada tutun - belgeler, asgari bir temel özellik listesi içermelidir, böylece neyi hedeflediğinizi ve ideal bir şekilde özellik listesinden türetilmiş bir görev listesini ve net bir göstergeyi içermelidir. kimin görevi üzerinde çalışıyor. Kimin hangi görevi üzerinde çalışması gerektiği ve yaptıkları listeden çıkarması gereken kaba bir fikir edinmek için birbirinizle konuşun. Her şeyin hala geçerli olup olmadığını ve öncelikleri yeniden düzenlemeniz gerekip gerekmediğini görmek için listeyi tekrar gözden geçirin ve yeniden değerlendirin.
Kendisine Kusurlu Stüdyoları denen bir ekiple çalışıyorum. Yıllarca aynı konuyla uğraştık ve kısa süre önce nihayet girdim ve gameobject'leri birleştirmeme yardımcı olacak bir uzantı yazmaya başladım.
Temel olarak yaklaşım, her gameobject, komponent ve özelliği karşılaştırma için yan yana dizen ve değerleri (veya tüm nesneleri) bir taraftan diğerine kopyalamak için düğmeler sağlayan bir pencerede denetçi benzeri bir arayüz oluşturmaktır. Eğer SerializedProperty
sınıfa aşina iseniz , burada işin büyük kısmını yapan şey budur. Temel olarak katlama durumunu sağ ve sol taraf arasında senkronize eden ve her yerde bir GameObject
veya daha fazla dikey boşluk oluşturan bir GUI oluştururuz.Component
sadece sağ veya sol tarafta var. Karşılaştırma fonksiyonu her seviyede eşitliği kontrol eder ve eşitliğin durumuna bağlı olarak her çizginin arka planını kırmızı veya yeşile dönüştürür. Çocukları fark içeren her satır da kırmızı olur ve ağacı tekrarlayarak aramak ve çocuklarında farklı olan tüm nesneleri genişletmek için şık bir düğme de ekleriz.
Ayrıca, karşılaştırmadan belirli bileşen türlerini filtrelemenize izin veren bir maske alanı kümesi vardır. Adı, katmanı ve etiketi gibi GameObject öznitelikleri de karşılaştırılır. 'Özelliğini kullanabilmek için kullanırız SerializedObject
ve bunları denetçide çizildiği şekilde çizeriz. Bu tutarlılık sağlar ve kodlanması çok daha kolay bir halt!SerializedProperty
gameObject
Son şık ayrıntılardan biri, karşılaştırma işleminin (nesneler yüklendiğinde ve bir değişiklik yapıldığında tetiklenen), EditorWindow.Update
karmaşık bir nesneyi karşılaştırmanız durumunda , işlev tarafından güncellenen geçici bir koroinde yürütülmesidir. Pencere editörü kilitlemiyor. Yüzlerce (veya bin!) Çocuğu olan nesneleri karşılaştırırken bu bir zorunluluktu. Sonuçta, arkadaşımın dediği gibi bir tür "lego projesi" oldu, ama kesinlikle işbirliği iş akışımızın bir parçası haline gelen paha biçilmez bir araç.
Aracı, Birlik Birleştirme olduğu belgelenmiş bir yol haritası ve geri bildirim ve konu raporlama için bir e-posta adresini içerir Birleştirmek wiki üzerinde. Gerçekten karmaşık bir birleşme ile mücadele ediyorsanız, bir şans verin ve bize ne düşündüğünüzü bildirin! Ayrıca, bir DLL içine inşa zahmet etmedi, bu yüzden kaynağında dürtmek için çekinmeyin. Özel coroutine uygulaması ve SerializedProperty
manipülasyonları ile ihtiyaç duyduğum birkaç GUI numarası editör eklentisi araç setinizin büyük bir bölümünü oluşturuyor. Kullanıcıların sahip olabileceği değişikliklerle / iyileştirmelerle ilgileniyorum, bu yüzden lütfen iletişime geçin!
Bunun için paranız varsa, Unity'nin pro sürümüne sahip Asset sunucusu oldukça iyi. Geçmişte büyük, çok kişili bir projede kullandım ve işi yaptım. Vanilya sürüm kontrolü için, yapmayı beklediğimiz şeyi yaptı.
Bir Unity projesiyle birlikte bir SVN deposu kullanmayı denedim ve biraz güçtü. Ancak, işe yaramadan önce fikri hurdaya çıkardık. Unity, sunucuya senkronize edilmemişlerse ne olacağını bulmak için zaman ayırmak istemediğim birçok yedekleme dosyasını tutar. Bence, biraz incelikli, yapılabilir olabilir, ancak iyi çalıştığı konusunda deneyimim olmadı.
DropBox'ın ücretsiz özelliklerini kullanarak küçük bir proje yaptım. Bu beni tedirgin etti ama hiç sorun yaşamadık. Ve, bu proje için herhangi bir gerçek sürüm kontrol malzemesine ihtiyaç duyduğumuzu sanmıyorum, bu nedenle dosyaları geri alma veya birleştirme işleminin nasıl gideceği konusunda çok fazla konuşamıyorum.
Dropbox, dosya başına sürüm oluşturmayı (taahhüt başına değil) destekler ve Unity ile iyi oynar. Başlangıçta ücretsiz (2 gigabayt) ve bundan sonra oldukça ucuz (50 gig için yaklaşık 10 dolar). Sürüm geçmişine erişebilmek için PackRat eklentisine ihtiyacınız var.
Aynı SVN, CVS, GIT vb. Gibi, geliştirme aşamasındaki her bir aşamaya geldiğinizde (örneğin, hafta sonu, dönüm noktası sonu) etiket klasörleri oluşturduğunuzdan emin olmanız gerekecektir. Yukarıda belirtilenlerin aksine, böyle bir aşamaya geri dönmek çok daha zor olacaktır , çünkü her bir dosyayı ayrı ayrı geri almak zorunda kalacaksınız. Geliştirme sırasında bunu aklınızda bulundurun ve Asset Sunucusu için ödeme yapmadan kolay zaman geçirin.