Oyunlar farklı platformlar için nasıl oluşturulur?
Örneğin, Call of Duty: Modern Warfare 3, PS3, Xbox 360, Wii ve PC'de mevcuttur.
Tamamen ortak bir kod olmadan yeniden programlanıyorlar mı? Ara kod var mı?
Oyunlar farklı platformlar için nasıl oluşturulur?
Örneğin, Call of Duty: Modern Warfare 3, PS3, Xbox 360, Wii ve PC'de mevcuttur.
Tamamen ortak bir kod olmadan yeniden programlanıyorlar mı? Ara kod var mı?
Yanıtlar:
Çoğu üretim seviyesi oyun motoru, Donanım Soyutlama Katmanı olarak bilinen şeye sahiptir. Bu, oyun motorunun hangi donanım olduğunu bilmek zorunda kalmadan donanımla konuşmak için kullanabileceği genel bir API'dir. Sadece SoundManager.PlaySFX (SFX_ID) veya benzerini çağırıyorlar. Ancak ses yöneticisinin altında hangi donanımın üzerinde çalıştığını bilecek ve ses efektini çalmak için uygun aramaları yapacak.
Bu, motorun soyutlama katmanı kullanılarak geliştirilmesine izin verir, böylece soyutlama ile eşleşen donanım için bir API sağlandığı takdirde herhangi bir sistemde çalışabilir. EDIT: Johnathan tarafından belirtildiği gibi, çalıştırmak istediğiniz her platform için bir API gereklidir. Ve Trevor'a göre, yüksek bellek sisteminden düşük belleğe geçerken (benim için en kötüsü PS3'ten PSP'ye) farklı donanım sınırlamalarını ele almanız gerekebilir. Neyse ki benim için bir platform nedeniyle tüm sistemi yeniden yazmak zorunda kalmadım, ama daha az ayak basmak için nesneleri gözden geçirmek ve optimize etmek zorunda kaldım.
Şeylerin diğer tarafı, dokuların veya modellerin ve benzerlerinin çözünürlüklerinin farklı olduğu sanat alanındadır. Oyunun varlıkları belirli bir hedefe doğru oluşturulabilir, böylece bir PC, PS3'ün desteklediği ve benzerlerinin belirli formatlara dönüştürülürken wav dosyalarını ses efektleri için alır.
Bu yardımcı olur umarım.
Diğer cevaplar, ideal durumlarda işleri açıklar. Çoğu kod oyunlar için ortaktır ve donanıma / platforma bağlı parçalar için temiz bir soyutlama katmanı kullanılır.
Bununla birlikte, birçok oyunun dış kaynaklı bir şirket tarafından yapılan portları vardır ve kod önemli ölçüde farklılık gösterir. Bu özellikle konsollar için geçerlidir, ancak Windows'dan OSX veya Linux bağlantı noktalarına da yaygındır.
Konsollarda, donanım genellikle çekirdek oluşturmanın tüm bölümlerinin (ve nadiren diğer sistemlerin) tamamen yeniden yazılması gerektiği kadar farklıdır. İşletim sistemi API'ları farklı olduğu, ancak tüm PC donanımı kabaca aynı olduğu için bilgisayarda D3D ve OpenGL üzerinde özet oluşturabilirsiniz.
Konsol alanında, süper verimli muhteşem görüntü oluşturma motorunuzun doğrudan farklı bir konsola aktarılması imkansızdır, çünkü GPU yetenekleri çok farklıdır ve 7 yıl almak için performansın her son yüzdesini sıkıştırmanız gerekir modern oyun çalıştırmak için eski donanım. XBox'ta en iyi şekilde çalışan aydınlatma geçişlerinin PS3'te korkunç derecede yavaş olduğu ve XBox'ta PS3 köpeklerinde en iyi yaklaşımın olduğu durumları kolayca bulabilirsiniz. Diğer donanım ve platform farklılıkları (örn. PS3'teki SPU'lar ve XBox'ın üç çekirdekli işlemcisi), platforma bağlı tek kod yolunuz olarak basit bir ince donanım soyutlama katmanına güvenmeyi çok zorlaştırır.
Her platform aynı zamanda onu doğru şekilde kullanmak için kapsamlı bir uzmanlık gerektirdiğinden, birçok oyun oyunu ek platformlara getirmek için özel bir dış kaynaklı taşıma şirketi gerektirir. PC alanında bazen bağlantı noktası yapan solo geliştiricileri bulabilirsiniz (Ryan "icculus" Gordon gibi birçok Linux oyun portu yapan; genellikle doğrudan çalışma, D3D'yi GL ve Win32'yi POSIX / SDL'ye değiştirme) daha büyük oyunlara oldukça büyük taşıma çalışmaları yapmak için tüm ekipleri olan şirketler var.
Bazı platformların bağlantı noktaları neredeyse tamamen yeniden yazma veya varlık yeniden tasarlama gerektirir. Örneğin Call of Duty'in Wii portları, dış kaynaklı bir şirket tarafından yapıldığında ve sanat varlıkları da dahil olmak üzere her şeyin Wii'nin çok sınırlı donanımının kısıtlamalarına uyması için yeniden yapılması gerekiyordu. Örneğin, Wii'nin gölgelendiricileri bile yok, bu yüzden aynı motoru ve efektleri / malzemeleri yeniden kullanmak neredeyse imkansızdı ve sınırlı bellek ve CPU / GPU daha küçük dokular ve daha az ayrıntı modelleri, ayrıca oyun sınırlamaları vb. Aynı şekilde mobil platformlara olan portlar genellikle tamamen üçüncü tarafça tamamen yeniden yazılır.
Daha yeni motorlar platformlar arasında taşımayı kolaylaştırır, ancak daha büyük oyunların genellikle kodlarının büyük bölümlerini güncellemesi ve daha yetenekli PC platformlarından ve konsollarından daha kısıtlı platformlara geçmek için birçok varlığı yeniden yapması gerekir.
James, belirli platformlarda uygulama için değil, yalnızca PC ile ilgilidir.
Tüm motorlar oyun kodunun büyük çoğunluğu için platformu soyutlarken, platform başına bazı bölümlerin yazılması gerekir. Bu ağ, görüntü oluşturma, ses, cihaz girişi ve video çıkışı dahil olmak üzere tüm G / Ç'yi içerir.
Xbox ve PS3'te Unreal demek için oluşturma kodunu karşılaştırın. Xbox, Xbox DirectX sürümünü kullanırken PS3 libgcm kullanır (OpenGl kütüphanesi çok yavaş). Biraz basitleştirmek için, tüm platformlarda oyun programcıları sadece bir "AudioSystem.PlaySound ( burada SoundName ) görürken, her platform için dahili olarak işlev görürler, ses çıkışı için platform API'sını
çağırırlar . Daha fazla programlama için ayrıca Tatrad'ın yorumuna bakın.