Un # 'da C # farklı mı?


18

Unity farklı bir C # sürümü kullanıyor mu yoksa hepsi aynı mı? Normal C # 'dan farklı görünüyor, ancak orada bazı düzenli C # elemanları var.


4
Ne gibi farklılıklar görüyorsunuz?
Anko

Bahsettiğiniz değişikliklerin C # dili değil, çerçeve farkları olduğundan şüpheleniyorum. Unity3d'de .Net çerçevesini (Via Mono) ve Unity'ye özgü çerçeve öğelerini C # dili ile kullanıyorsunuz.
Mike B

Bu sadece çok eski bir versiyon. C # ve Mono'nun
Den

Küçük kütüphane farklılıkları fark ettim, örneğin Unity'de Math işlevleri yerine Math işlevleri için bir Mathf sınıfı var. Başka farklılıklar varsa dikkat etmedim, ama göze çarpan şey bu.
Alex

@Alex System.Math hala kullanılabilir ve görünüşe göre aslında hızlıdır daha UnityEngine.Mathf . Bu yüzden Unity versiyonunu kullanmanın tek gerçek nedeni, bir miktar performansın pahasına çok sayıda (float) dökümden kaçınmaktır.
FlintZA

Yanıtlar:


9

Diğer cevaplarda belirtildiği gibi Unity 4.x , Mono 2.6 tabanlı Mono'nun değiştirilmiş bir versiyonunu kullanır

Mono 2.6'ya özgü bir uyumluluk listesini izleyememiş olsam da , çoğunlukla .Net 2.0 ile uyumludur.

Normal C # 'dan farklı görünüyor, ancak orada bazı düzenli C # elemanları var.

Sorunuzla ilgili yorumlardan birinde belirtildiği gibi, bunun nedeni büyük olasılıkla dilin kendisi yerine Unity'nin özel komut dosyası API'sıdır.

Örnek olarak, tipik bir Birlik projelerinde çok sayıda kod, MonoBehavior adlı bir sınıfın alt sınıflarında bulunur. Bunlar Unity Editor ortamında GameObjects üzerine bırakılan bileşenlerdir. Bu mimari birkaç şekilde tipik C # koduna (bana göre) farklı görünen C # koduna yol açar:

  • Unity 4 piyasaya sürülünceye kadar, bu nesneler ad alanlarında bulunamazdı, bu yüzden her zaman global ad alanındalar
  • Alanları düzenleyici ortamına açık hale getirerek (veya SerializeField özniteliğini kullanarak açığa çıkarırlar, ancak çok az insan bunu kullanır), bu da sınıflarda olağandışı çok sayıda genel alana yol açar
  • Unity'nin gizliliği ve vaka kuralları Microsoft'ları izlemez, bu nedenle bu "geleneksel" bir C # geliştiricisine de garip gelebilir
  • Bu bileşenler üzerinde, tipik olarak beklendiği gibi geçersiz kılmayan, ancak bunun yerine yansıma yoluyla erişilen, Başlat ve Güncelle gibi bir dizi özel yöntemden yararlanırlar.

Pratik olarak, Unity'nin mevcut C # sürümünde özlediğim en büyük C # dili özelliği, zaman uyumsuzluk ve ilgili anahtar kelimeler ve işlevler için destek . Birlik'teki benzer bir kavram koroutindir . Bunlar ana iş parçacığında yürütülür, bu nedenle gerçek zaman uyumsuz değildir, ancak uzun çalışan kodun birden çok kareye bölünmesine izin verir. Daha düşük düzeyli çoklu kullanım desteklenmektedir.


2
Sadece açıklığa kavuşturmak için, asyncC # da çok iş parçacıklı olduğu gibi gerçek asenkron değil - aynı zamanda ana iş parçacığında da çalışır. Kullanım perspektifi açısından, couteinler ve zaman uyumsuzluk arasındaki en büyük fark, kodun çalıştırıldığı zamandır.
Şubat'ta

Teşekkürler. Evet async! = Çok iş parçacıklı, ancak çok iş parçacıklı işlemleri gizlemek / etkileşimde bulunmak için zaman uyumsuzluğu kullanmanın coroutines ile aynı şeyi yapmaktan çok daha yaygın olduğunu söyleyebilirim. Bana çok benzer bir esneklik düzeyi alır bir threadpool delege görevleri başladı bir sarıcı coroutine yazdım, ama yine de "uygun" asenkron desteği olan sakıncası olmaz. Tabii ki iyi bir modern GC daha iyi olurdu;)
FlintZA

21

Unity 4 , C # dili de dahil olmak üzere .NET çerçevesinin tam bir uygulaması olan Mono 2.6'yı kullanır .

Nasıl farklı göründüğünden emin değilim, ancak Unity'nin aynı Mono çalışma zamanının üstünde çalışan birkaç dili desteklediğini unutmayın. C # 'ı UnityScript ile karıştırmanız mümkün mü ?


10
Eklemek için Mono 2.6, dil özellikleri açısından C # 3.0'a eşdeğerdir. Mono 2.6.1, C # 4.0 özellikleri eklemeye başladı.
Cooper

İşte Unity's Mono Uyumluluğu v4.1.2'den
Kelly Thomas

Sadece küçük değil, büyük bir sürüm artışı var: mono-project.com/Release_Notes_Mono_3.4
Den

3

Birlik normal C # kullanır.

Daha sonra, Unity'de C # yazdığınızda, kitaplıklarının çoğunu kullanacaksınız, ancak bildiğim kadarıyla, City'de mümkün olan her şey aşağıda listelenen farklılıklar dışında Unity'de mümkündür:

  • Net'in Windows Forms ve ASP ile ilgili daha spesifik alanları Unity aracılığıyla sınırsızdır.

  • Visual Studio'yu düzenleme ve derleme zamanı hataları için kullanabilirsiniz, ancak Unity IDE'de derlemeniz ve çalıştırmanız gerekir.

  • Unity, .Net'in açık kaynaklı bir uygulaması olan Mono'yu kullanır, bu da küçük farklılıklar olduğu anlamına gelir.


İkinci merminizi genişletmek için - UnityVS kullanarak Visual Studio'da hata ayıklayabilirsiniz . Microsoft yakın zamanda geliştiricileri satın aldı, böylece eklentiyi yakın gelecekte ücretsiz olarak yayınlayacaklar.
mrohlf

Üzgünüz ama normal C # yakınında hiçbir yerde.
Alper

0

Unity tarafından kullanılan C # Sürümü'nün "normal" C # 'dan farklı olup olmadığı sorusu diğer gönderiler tarafından cevaplanmıştır. Açıkça Unity bazı (daha yüksek Visual Studio 2010 yani C # 4.0 ve) iş yerinde C # ı kullanımını karşılaştırırken ben fark sadece küçük bir fark paylaşacak böyle düzenli bir sürümden farklı olabilir elemanları ve C #, soran olduğundan hangi işlev tanımlarındaki parametreler için varsayılan değerleri kullanamıyorum. C # 'ın daha yeni bir sürümünü kullanmak için projenizi daha dikkatli bir şekilde ayarlamanız gerekir. Daha fazla açıklama için bu bağlantıya bakın .

Düzenleme: Bu cevabı bildiğim kadarıyla bu kadar çok insanın başına gelen bir yanlış anlama olduğunu bırakıyorum.


Bu özellik yalnızca 4.0 sürümünde C # 'a eklendiğinden ve daha önce mevcut olmadığından, yokluğu gerçekten "C #" ile "fark" olarak adlandırılamaz.
VEYA Haritacı

1
C # Sürüm 4 2010 yılında piyasaya sürüldü. Sanırım bir çok insan bunu kullanıyor ve Unity'de programlama yaparken yokmuş gibi hissediyorum.
Nessuno

Varsayılan değerleri kullanamayacağınızdan emin misiniz? Yaptığımdan ve yaptığımdan eminim ...
NPSF3000

Denedim ve varsayılan değerleri kullanamayacağımı söyleyen bir mesajla derlenmeyecek. Unity'nin özel bir sürümünü mü kullanıyorsunuz? Profesyonel sürümü beğendiniz mi?
Nessuno

1
Kesinlikle varsayılan değerleri kullanabilirsiniz ve pro ya da pro ile ilgisi yoktur. Unity ve MonoDevelop'un garip bir ilişkisi var. MonoDevelop'da otomatik olarak oluşturulan projeler genellikle C # 'ın varsayılan değerleri desteklemeyen önceki sürümlerine ayarlanır. Ancak bu ayarı projede değiştirirseniz, iyi çalışır. MonoDevelop'da derlemeyi yoksayar ve sadece Birliğe geri dönerseniz, Unity'nin varsayılan parametrelerden şikayet etmediğini göreceksiniz.
BayCranky
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.