Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET kullanarak bir UWP oyunu oluştururken Unity düzenleyicisinde veya tek başına bir bilgisayar oyunu için kullanabileceğiniz bazı API'lerin UWP için mevcut olmadığını fark edebilirsiniz. Bunun nedeni, UWP uygulamaları için .NET'in her ad alanı için tam .NET Framework'te sağlanan türlerin bir alt kümesini içermesidir.
Buna ek olarak, bazı oyun motorları Unity Mono gibi UWP için .NET ile tam olarak uyumlu olmayan farklı .NET türleri kullanır. Bu nedenle, oyununuzu yazarken düzenleyicide her şey yolunda gidebilir; ancak UWP için derleme yaptığınızda şu hataları alabilirsiniz: 'System.Runtime.Serialization' ad alanında 'Formatters' türü veya ad alanı yok (derleme başvurusu eksik mi?)
Neyse ki Unity, Evrensel Windows Platformu: .NET Betik Arka Ucuüzerinde eksik .NET Türleri bölümünde açıklanan uzantı yöntemleri ve değiştirme türleri olarak bu eksik API'lerden bazılarını sağlar. Ancak, ihtiyacınız olan işlevsellik burada değilse, Windows 8.x uygulamaları için .NET'e genel bakış kodunuzu Windows Çalışma Zamanı API'leri için WinRT veya .NET kullanacak şekilde dönüştürme yöntemlerini açıklar. (Windows 8'i açıklar, ancak Windows 10 UWP uygulamaları için de geçerlidir.)
.NET Standard
Bazı API'lerin neden çalışmadığını anlamak için farklı .NET tatlarını ve UWP'nin .NET'i nasıl uyguladığını anlamak önemlidir. .NET Standard
UWP SDK'sının her sürümü farklı bir .NET Standard düzeyine uygundur. Örneğin, 16299 SDK 'sı (Fall Creators Update) .NET Standard 2.0'ı destekler.
Hedeflediğiniz UWP sürümünde belirli bir .NET API'sinin desteklenip desteklenmediğini öğrenmek istiyorsanız .NET Standart API Başvurusu denetleyerek UWP'nin bu sürümü tarafından desteklenen .NET Standard sürümünü seçebilirsiniz.
Betik yürütme arka planı yapılandırması
UWP oluşturma konusunda sorun yaşıyorsanız yapmanız gereken ilk şey,
Betik Çalışma Zamanı Sürümü, Unity betik arka ucu tarafından kullanılan ve seçtiğiniz .NET Framework desteğinin (kabaca) eşdeğer sürümünü almanıza olanak tanıyan yöntemdir. Ancak, .NET Framework'ün bu sürümündeki tüm API'lerin desteklenmeyeceğini, yalnızca UWP'nizin hedeflediği .NET Standard sürümündeki api'lerin desteklenmediğini unutmayın.
Yeni .NET sürümleriyle genellikle .NET Standard'a daha fazla API eklenir ve bu api tek başına ve UWP'de aynı kodu kullanmanıza olanak tanıyabilir. Örneğin, System.Runtime.Serialization.Json ad alanı .NET Standard 2.0'da kullanıma sunulmuştur.
Son olarak, Api Uyumluluk Düzeyi oyununuzun çalışmasını istediğiniz .NET sürümüne ayarlamanız gerekir. Bu, Betik Çalışma Zamanı Sürümüile eşleşmelidir.
Genel olarak, Betik Çalışma Zamanı Sürümü ve Api Uyumluluk Düzeyiiçin . NET Framework ile daha fazla uyumluluk elde etmek için en son sürümü seçmeniz ve böylece daha fazla .NET API'sini kullanmanıza izin vermelisiniz.
Platforma bağımlı derleme
Unity oyununuzu UWP dahil olmak üzere birden çok platform için oluşturuyorsanız, UWP için tasarlanan kodun yalnızca oyun UWP olarak derlendiğinde çalıştırıldığından emin olmak için platforma bağımlı derlemeyi kullanmak istersiniz. Bu şekilde, derleme hataları almadan bağımsız çalışan masaüstü uygulamaları ve diğer platformlar için tüm .NET Framework'ü ve UWP için WinRT API'lerini kullanabilirsiniz.
Yalnızca UWP uygulaması olarak çalışırken kod derlemek için aşağıdaki yönergeleri kullanın:
#if NETFX_CORE
// Your UWP code here
#else
// Your standard code here
#endif
Uyarı
NETFX_CORE yalnızca .NET betik arka ucuna karşı C# kodu derleyip derlemediğinizden denetlemek içindir. IL2CPP gibi farklı bir betik arka ucu kullanıyorsanız bunun yerine ENABLE_WINMD_SUPPORT kullanın.
Yaygın sorunlar ve geçici çözümler
Aşağıdaki senaryolarda, UWP alt kümesinde .NET API'lerinin eksik olmasıyla ilgili ortaya çıkabilecek yaygın sorunlar ve bunların arasında gezinme yolları açıklanmaktadır.
BinaryFormatter kullanarak veri serileştirme
Oyunların kaydetme verilerini, oyuncuların kolayca manipüle edememesi için serileştirmesi yaygındır. Ancak, bir nesneyi ikili olarak serileştiren BinaryFormatter, .NET Standard'ın önceki sürümlerinde (2.0'ın öncesinde) kullanılamaz. Bunun yerine XmlSerializer veya DataContractJsonSerializer kullanmayı göz önünde bulundurun.
private void Save()
{
SaveData data = new SaveData(); // User-defined object to serialize
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(typeof(SaveData));
FileStream stream =
new FileStream(Application.persistentDataPath, FileMode.CreateNew);
serializer.WriteObject(stream, data);
stream.Dispose();
}
G/Ç işlemleri
System.IO ad alanında FileStreamgibi bazı türler .NET Standard'ın önceki sürümlerinde kullanılamaz. Ancak Unity, Directory, Dosyave FileStream türlerini sağlar, böylece bunları oyununuzda kullanabilirsiniz.
Alternatif olarak, yalnızca UWP uygulamalarında kullanılabilen Windows.Storage API'lerini kullanabilirsiniz. Ancak, bu API'ler uygulamayı kendi depolama alanına yazmayla kısıtlar ve tüm dosya sistemine ücretsiz erişim vermez. Daha fazla bilgi için bkz. dosyalar, klasörler ve kitaplıklar
Önemli bir not, Kapatma yönteminin yalnızca .NET Standard 2.0 ve sonraki sürümlerde kullanılabilir olduğudur (unity bir uzantı yöntemi sağlar). Bunun yerine Dispose kullanın.
İplilik
System.Threading ad alanları içindeki ThreadPoolgibi bazı türler .NET Standard'ın önceki sürümlerinde kullanılamaz. Bu durumlarda, bunun yerine Windows.System.Threading ad alanını kullanabilirsiniz.
Hem UWP hem de UWP olmayan platformlara hazırlanmak için platforma uygun derlemeyi kullanarak Unity oyununda iş parçacıklarını yönetmeyi şu şekilde işleyebilirsiniz:
private void UsingThreads()
{
#if NETFX_CORE
Windows.System.Threading.ThreadPool.RunAsync(workItem => SomeMethod());
#else
System.Threading.ThreadPool.QueueUserWorkItem(workItem => SomeMethod());
#endif
}
Güvenlik
Bazı System.Security.* ad alanları, örneğin System.Security.Cryptography.X509Certificates, UWP için bir Unity oyunu oluşturduğunuzda kullanılamaz. Bu gibi durumlarda Windows.Security kullanın. aynı işlevlerin çoğunu kapsayan* API'ler.
Aşağıdaki örnek, belirtilen ada sahip bir sertifika deposundan sertifikaları alır.
private async void GetCertificatesAsync(string certStoreName)
{
#if NETFX_CORE
IReadOnlyList<Certificate> certs = await CertificateStores.FindAllAsync();
IEnumerable<Certificate> myCerts =
certs.Where((certificate) => certificate.StoreName == certStoreName);
#else
X509Store store = new X509Store(certStoreName, StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly);
X509Certificate2Collection certs = store.Certificates;
#endif
}
WinRT güvenlik API'lerini kullanma hakkında daha fazla bilgi için bkz. Güvenlik.
Ağ Kurma
bazı ad alanları, System.Net.* System.Net.Mailgibi, UWP için Unity oyunu oluştururken de kullanılamaz. Bu API'lerin çoğu için, benzer işlevleri elde etmek amacıyla ilgili Windows.Networking.* ve Windows.Web.* WinRT API'lerini kullanın. Daha fazla bilgi için bkz. Ağ ve web hizmetleri.
System.Net.Maildurumunda Windows.ApplicationModel.Email ad alanını kullanın. Daha fazla bilgi için bakın. E-posta gönderme.
Ayrıca bakınız
- Evrensel Windows Platformu': .NET Betik Arka Uç Üzerinde Eksik .NET Türleri
- UWP uygulamaları için .NET'e genel bakış