Bu kılavuzda, tipik bir oyun geliştirme döngüsü özetlenmektedir. Bunu okuduktan sonra rehberini referans olarak da kullanabilirsiniz.
Unity ile çalışırken geliştirme yaşam döngüsü üç kısımdan oluşur. aşama:
- Planlama ve tasarlama
- Geliştirme ve test etme
- Yayınlama ve yönetme
Planlama ve tasarlama
Plan ve tasarım aşamasında oyununuzu nasıl geliştireceğinize siz karar verirsiniz. Siz mobil cihazlar için uygulama geliştirmenin zorluklarını nasıl ele alacağınıza karar verme araçları ve süreçleri belirlemeyi öğreneceksiniz.
Tüm ekip üyelerinin görüşlerini almak
Sanat, mühendislik, tasarım, ses ve uygulama görevlerini belirleyip kaydetmelerine olanak tanır. Örnek:
- Sanat ekipleri, karakterler için öğe dokusu ve bağlantılı bütçeler oluşturabilir emin olmaktır.
- Mühendislik, bir proje yöneticisinin kullandığı profil çıkarma işini kolaylaştırır.
- Tasarım, deneyimi mümkün kılan oyun mekaniklerini planlayabilir.
- Ses uzmanları, Kullanıcı arayüzü, 2D ve 3D mekansal sesler.
- Üretim aşamasında lansman gereksinimlerini iletebilir ve ve projenin yolunda gitmesini sağlar.
Mobil cihazlar için tasarlayın
Mobil platformlar için uygulama geliştirmede dikkate alınması gereken bazı bazı noktalar vardır. Örneğin:
- Değişken ekran en boy oranları
- Güç tüketimi
- Termal ve işlemci kısıtlaması
- Dokunmatik giriş
- Platformlar arası geliştirme
- Grafik API'leri (Vulkan veya OpenGL ES)
Mobil cihazlar için tasarımla ilgili dikkat edilmesi gereken noktalarla ilgili ayrıntılar için Unity'de Android geliştirme Unity'den ve Google Play Akademisi.
Geliştirme ve test etme
Geliştirme ve test aşamasında oyununuzu oluşturur, test eder hazırlıklı olmaktır. Sınırlı dahili Google Play'de test etme hazırlıklı olmak için testlere katılın. Arama terimlerinizi göre Unity'de öğeleri düzenleyerek Play Asset Delivery ve Unity Adresler sistemlerdir.
Aşağıdaki bölümlerde, tasarlanan Unity araçları ve teknikleri Android için geliştirme yapmanıza yardımcı olacağız.
Oluşturma
Oluşturma, Unity sahnenizden 3D ve 2D öğeler çizme işlemidir ekranda görebilirsiniz. Unity motoru oluşturma işlemini yaparken Android platformu için birkaç unsuru göz önünde bulundurmak önemlidir.
Dokular
Hedefinize göre en büyük doku boyutlarına ihtiyacınız olup olmadığını belirleyin cihazlar. Profil oluşturduğunuzda bellek ayırma, hedefi değiştirmenin sağlayacağı potansiyel tasarrufları Doku boyutu.
Kare süresi
Android cihazlarda aşırı ısınmayı önlemek için kare süresini hedefleyin 21 milisaniyenin altındaki değerlere sahip. Bazen, örneğin yükleme veya kısa sinematik deneyim, kare süreleriniz 21 milisaniyeyi aşabilir, ancak 21 milisaniyenin altında kalmanız gerekir milisaniye cinsinden eşik.
Mobil platformlarda minimum hedefe ulaşmaktır. Örneğin, 60 Hz ekran güncellemesinde 60 fps'de, oyununuz 30'a daraltılır; 30'a ulaşmazsanız 15.
Birçok Android cihaz 60 Hz ve 120 Hz ekran yenileme hızlarıyla gönderilir. Çok daha kısa kare sürelerini hedeflemenin avantajlarını tartmanın 60 Hz güncelleme ve 120 Hz için 5 ms.) termal kısıtlamayı veya diğer özellikleri daha yüksek oluşturma hızları için pilin daha hızlı tükenmesini sağlar.
Unity'de oyununuzda belirli bir kare hızını ayarlamak için şunu kullanın: Application.targetFrameRate.
Android Kare Hızı kitaplığı resim oluşturmanıza yardımcı olur uygulamanızın bir sonraki kareyi sunması daha uzun sürdüğünde sorunsuz bir şekilde gerekenden daha yüksek bir fiyatla karşılaşabilirsiniz. Unity'nin 2021 ve sonraki sürümleri için Android kare hızı etkinleştirildiğinde görüntü yenileme hızı hedef kare hızı için en iyi eşleşmeyi sağlar. Bu şekilde oyunun ve gereksiz ekran güncellemeleriyle boşa pil gücünü harcayın.
Kitaplığı etkinleştirmek için Proje Ayarları'nda > Oynatıcı: Android Ayarları, Optimize Edilmiş Çerçeve İlerlemesi onay kutusunu işaretleyin.
Vulkan API'sı
Vulkan, platformlar arası, yüksek performanslı bir 3D daha düşük ek yüke sahip bir grafik API'sidir. Unity, Vulkan'ı kullanabilir sağlayabilir.
Otomatik Grafik API'sı
Auto Graphics API'yi Vulkan ile kullanabilirsiniz, ancak bu farklı olabilir davranış şekilleri, yüklediğiniz Unity sürümüne bağlı olarak farklılık gösterir. Şunları seçebilirsiniz: Proje Ayarları > Oynatıcı > Oluşturma.
Hangi Unity sürümünü kullanacağınıza karar verirken aşağıdaki noktaları göz önünde bulundurun: kullanın:
- Unity 2021.1 ve önceki sürümler Vulkan'ı Auto ile desteklemez Grafik API'sı. Unity, OpenGL ES 3.2'yi kullanmaya çalışır. Cihaz şunları desteklemiyorsa: OpenGL ES 3.2, Unity bu sırayla OpenGL ES 3.1, 3.0 veya 2.0'a geri döner.
- Unity 2021.2 ve sonraki sürümlerde ilk olarak Vulkan kullanılır. Cihaz Vulkan'ı desteklemez. Unity, OpenGL ES 3.2, 3.1, 3.0 veya 2.0'a geri döner.
Manuel grafik API'leri
Alternatif olarak, Auto Graphics API'yi devre dışı bırakarak Vulkan'ı manuel olarak etkinleştirebilirsiniz. Unity 2021.1 veya önceki bir sürümü kullanıyorsanız yalnızca bu Vulkan.
Vulkan, bu listede OpenGL ES'den daha üst sıralardaysa Unity öncelikle Vulkan. Cihaz, Vulkan'ı desteklemiyorsa Unity, OpenGL ES ile çalışır. Android'de Vulkan hakkında aşağıdaki gibi ayrıntılı bilgi için Vulkan'ı kullanmaya başlama bölümüne bakın: Modern grafik API'lerini kullanmayı ve oyununuzun performansını optimize etmeyi öğrenin.
Çekim çağrıları
Ekranda görüntülenen her şey bir veya daha fazla çizim çağrısıyla ilişkilendirilir. Şu tarihte: mobil platformlarda gerçekleşen grafik işlem birimine (GPU) gönderdiğiniz anlamına gelir.
Çekim çağrılarını, trafik ışığının yanındaki arabalara benzetebiliriz. ışık yeşile döndüğünde, ışık geçmeden önce belirli sayıda arabanın geçebileceği anlamına gelir. Işık sarıya döndüğünde ideal hedef karenize ulaşmışsınızdır zaman (21 milisaniye) olduğunu ve ışık kırmızıya döndüğünde, bu süre 33 milisaniye cinsinden kare süresi sınırı. Bir sonraki oluşturma karesini etkileyen geçmiş her şey, Bu nedenle, sonuçta elde edilen kare hızı hedef 30 fps'den düşüktür.
Oyununuzda çizim çağrısı performansını nasıl iyileştirebileceğiniz hakkında bilgi için: bkz. toplu taşıma makalesini inceleyin.
Gölgeler
Gölge yayını çizim çağrıları, en fazla GPU tüketen ve en fazla miktarda tüketen Basit ortamlar için bile GPU süresi. Gölge yayını maliyetini azaltmak için veya yumuşak gölgeler yerine sert renkler kullanarak denemeler yapın. Eğer Bu, düşük segment cihazlar için GPU'da hâlâ çok pahalıdır; dağınık gölgeler kullanmayı tercih edebilirsiniz.
Doku
Önerilen doku Android'de RGB ve RGBA dokuları için sıkıştırma biçimi ASTC'dir. Unity'de, Android'de kullanmanız gereken minimum doku sıkıştırma seçeneği GD2'dir. ETC2'ye geri dönebilirsiniz. yedeğinizi Unity Derleme Ayarları bölümünde ASTC'den yedekleyin.
Platforma göre desteklenen biçimlerin tam listesini şu adresteki Unity belgelerinde bulabilirsiniz: Manuel: Platforma göre önerilen, varsayılan ve desteklenen doku biçimleri.
Kullanıcı arayüzü ve en boy oranları
Unity'yi kullanarak Cihaz Simülatörü ekran çözünürlüğünü, yönünü ve ekran çözünürlüğünü önizleme Unity Editor'da kullanabilirsiniz. Oyun görünümü arasında geçiş yapabilirsiniz ve Cihaz Simülatörü görünümüne sahiptir.
Şu adreste aracın önizlemesini görebilirsiniz: Unity'de Cihaz Simülatörü ile Oyununuzu Simüle edin.
Trivial Kart kaynak kodunu şurada bulabilirsiniz: oyun-örnekleri kod deposunu ziyaret edin.
Kullanıcı arayüzü tuval öğelerinin düzenini ve doğruluğunu Açılır menüde cihaz seçeneklerini belirleyerek Cihaz Simülatörü görünümü menü:
ziyaret edin.Unity ile ilgili daha fazla kullanıcı arayüzü optimizasyonu tekniği için Unity: Unity Kullanıcı Arayüzünü Optimize Etme.
Fizik
Nvidia PhysX motoru Unity'de yerleşik olarak bulunur. Varsayılan ayarlar mobil cihazlar için pahalı olabilir. Bu nedenle aşağıdaki noktalara dikkat edin:
- Hedef kare hızınızı göz önünde bulundurun ve sabit zaman adımını buna göre ayarlayın. Varsayılan değer 0,02 ms veya 50 Hz olarak ayarlanır. Bu değeri 0,03’e yükseltebilir veya daha yüksek olmasını sağlar.
- Örgü çarpışmalarını basitleştirmeyi ve katman çarpışmasını en aza indirmeyi düşünün Belirli bir katmanın oyun nesneleri arasındaki etkileşimleri belirlemeye yönelik matris bulunur.
Daha fazla bilgi için fizik ayarları optimizasyonlar hakkında daha fazla bilgi için Optimize Your Mobile Games e-Kitabı yardımcı oldu.
Profil
Uygulama geliştiriciler genellikle uygulamaya kadar profil çıkarmayı atlar veya yoksayar kritik bir hata noktasına ulaştığında Toplantılara özel bir zaman çizelgesi oluşturmak sürecinize entegre etmek ve aşağıdaki en iyi uygulamaları kullanmak için:
- Geliştirme sırasında profil çıkarmayı ayırabileceğiniz önemli noktaları belirleme anlayabilmek için çok önemlidir.
- Unity Profil Analiz Aracı.
- Oyununuzun performansını hedef cihazlarda göstererek nasıl performans gösterdiğini anlamanıza yardımcı olur.
- Oyununuzun farklı bölümlerinin profilini çıkarın.
- Oyuncularınızın oyunu nasıl oynadıklarına dair profil. (Yalnızca oyununuzun profilini oluşturmayın boşta kaldığında veya duraklatma ekranındayken).
- Oyun bir süre çalıştıktan sonra profil sürdürülebilir modda mobil cihazlar çalışırken karşılaşabileceğiniz kısıtlama sorunlarını Cihazlar sıcak.
Aşağıdaki profil oluşturma araçlarını ayrı ayrı veya birlikte kullanabilirsiniz.
Unity Profiler Unity Profiler tamamen entegre bir performanstır. bir analiz aracı oluşturabilirsiniz. geliştirme modu derlemeleri çalıştıran bağımsız Android cihazınıza bağlanabilir.
Android GPU Denetleyici ile Android GPU Denetleyici (AGI) kullanarak çerçeve düzeyinde hata ayıklama gerçekleştirebilirsiniz. AGI GPU, CPU, bellek, pil ve GPU dahil olmak üzere sistem hizmetlerini analiz eder sayaçlar.
Unity'de oyununuzun profilini çıkarmayla ilgili ayrıntılar için videoyu izleyin Unity'de profil oluşturmaya giriş veya Unity oyunlarının profilini çıkarmayla ilgili kapsamlı rehber her ikisi de Unity'den.
Bellek yönetimi
Android işlemleri, hedef cihazdaki mevcut belleği paylaşır. Şunları yapmalısınız: hedef test cihazında yeterli miktarda boş belleğe sahip olduğunda profil belleği kullanımı kaynaklar. Tutarlı bir şekilde bellek testleri yapın oturumları ve bellek kullanım trendlerini karşılaştırabilmek için sağlayabilir.
C# dilinde yazılmış komut dosyalarında çalışırken, dizelerin ve metinlerin dizeyle ilgili nesnelerin (JSON gibi) ayırmaları ve dosya oluşturabilirsiniz). Bunlar, sık sık bellek ayırmaları oluşturur ve parçalanmaya katkıda bulunur.
Şu özelliklerden faydalanabilirsiniz:
Dize Oluşturucu
büyük dizilerin dize manipülasyonuna ilişkin, yerinde birleştirme yerine
dizeler (örneğin, "this" + "is" + "a" + "bad" + "fikir" ve
StringBuilder.Concat()
işlev çağrısı).
Dizeler hakkında daha fazla bilgi için Dizeler ve metin inceleyebilirsiniz.
TextAsset ve JSON metin kaynaklarını tercihli kaynaklarla karşılaştırarak değerlendirin.
ScriptableObject
türü. ScriptableObjects
sahneler arası veri depolama işliyor
verimli bir şekilde çalışır ve Editör'den Oynatmaya
zaman değişikliklerine olanak tanır.
Varsayılan ayara göre alternatifleri kullanmayla ilgili bir tartışma için Mobil optimizasyonu için JSON işleyici, makalemize göz atın Ağ oyunlarında gizli optimizasyon inceliyordum.
Şunu kullanın: Memory Advice API'si kullanabilirsiniz. API yüksek, normal ve düşük bellek kullanımı için bir durma ışığı göstergesi görüntüler. Siz güncelleme için göstergeye abone olabilir veya doğrudan anket yapabilir şu anki için durumu. Kırmızı bir sinyal aldığınızda oyun nesnenizi azaltmayı düşünün havuz veya önbellek. Bu bağlamı canlı yayın sırasında oyun telemetrinize dahil edin ve performans metriklerinin incelenmesine odaklanacağız.
Android cihazlarda bellek düzenlemesi ve Unity'nin bununla çalışır, Android bellek kullanımını anlama (Google I/O 2018'den). Bu videoda, bellek sorunu türleri ve düşük bellek kapasitesinin ne zaman etkili hale geliyor.
Çöp toplama
Yönetilen bellek ortamında çöp toplama işlemi, kullanılmayan belleği temizler parçalar uygulama için geri dönüştürülebilecek parçalardan oluşur. Takip et çöp toplama en iyi uygulamaları .
Örneğin, isteğe bağlı kullanım yerine oyun nesne havuzu oluşturun.
tahsisler (GameObject.Instantiate
). Büyük havuzlar için:
birden fazla kareyi birbirinden ayırmak gibi
bir strateji, oyununuzun
Android cihazlarda yanıt vermiyor.
Aşağıdaki kod snippet'ini, şuradan çağrılan basit bir eş yordam için düşünün: bir MonoDavranışın başlangıcı:
// Option 1: Bad for memory management - causes allocation each iteration
IEnumerator UpdateEnemyTarget() {
while (enabled) {
yield return new WaitForSeconds(1.0f);
// Some intermittent function check
}
}
// Option 2: Better for memory management - allocation of yield instruction once, reused each iteration
private YieldInstruction waitForSecond = new WaitForSeconds(1.0f);
IEnumerator BetterUpdateEnemyTarget() {
while (enabled) {
yield return waitForSecond;
// Some other intermittent function
}
}
Şunları yapabilirsiniz:
düzenle
MonoBehaviour şablon dosyasını kullanarak varsayılan Start()
ve
Yanlışlıkla boş bırakmamanızı sağlayan Update()
saplama işlevi
işlevleridir.
MonoBehaviour etkinliklerinin yürütülme sırasına genel bakış için bkz. Etkinlik işlevleri için yürütme sırası inceleyebilirsiniz. Bellek yönetimi hakkında daha fazla bilgi edinmek için kurs Unity'de Bellek Yönetimi.
Mobil oyun performansıyla ilgili optimizasyon ipuçları için bkz. Mobil oyun performansınızı optimize etme: Unity'nin en iyi mühendislerinden profil oluşturma, bellek ve kod mimarisiyle ilgili ipuçları.
Prefabrik havuz
CPU kare süresi ani artışlarının nedeni, deneme sırasında önemlidir. Mermiler için nesne havuzlarını önceden çalıştırmayı düşünün. Oyuna girmeden önce ortaya çıkan düşmanları azaltmak veya görsel efektleri kaldırmak başlangıç CPU artışlarını ortadan kaldırır. Daha fazla optimizasyon yapabilirsiniz. birden fazla "ilk kullanıma hazırlama çerçevesi" üzerinden yükleme sırasında veya giriş sıraları ekleyin.
Unity Öğesinde birçok üçüncü taraf havuz öğesi bulabilirsiniz Mağaza nesne havuzu yönetimi ile ilgilidir. Kendiniz de etkileşim oluşturabilirsiniz. Görüntüleyin Unity Learn'de Nesne Havuzu Oluşturmaya Giriş.
Öğe teslimi
Uygulamanızın ilk kez ne kadar büyük olabileceğiyle ilgili sınırlamalar vardır dağıtıldı. Oyununuzun boyutuna ve niteliğine bağlı olarak oyun kaynaklarınızın bir kısmına veya tamamına (karakter modelleri, ortamlar, kullanıcı arayüzü öğeleri vb.) sağlayarak oyuncuların istediğiniz deneyimi yaşamalarını sağlayın.
URL parametrelerinin Google tarafından nasıl ele alınmasını istediğinizi belirtmek için Play Asset Delivery (PAD) hizmetini kullanarak oyununuzun yükleme sırasında ihtiyaç duyduğu öğeleri yönetebilir, veya isteğe bağlı olarak yürütülebilir. Unity Öğe Paketleri, yardımcı olabilir, ayrıca hangi öğelerin yayınlanacağını belirtmek için aracı kullanabilirsiniz.
Adreslenebilir öğeler
Prefabrik, doku ve ses gibi dinamik kaynaklar oluşturma hazırladığınız takdirde, çalışma zamanında artık karmaşık bir ve Adreslenebilirler adlandırma sistemini inceleyin. Adreslenebilir öğeleri nasıl düzenlediğinizi, içeriği oluşturma ve yükleme şeklinizden daha fazla bilgi edineceksiniz. Adreslenebilir öğeler sistemi Resources (Kaynaklar) klasörlerinin ve Öğe'nin yerini alır Öğelere referans verme ve bunları çalışma zamanında yükleme şeklinizi basitleştiren paketler.
Örnek için Adresler paketi kullanan demo projesi bulabilirsiniz. Adreslenebilir öğelerin geliştirilmesiyle ilgili ayrıntılar için şuraya bakın: Unity Blogunda Adreslenebilir Öğe Sistemi.
Adreslenebilir öğe düzeninin avantajları ve dezavantajları vardır. veya grup halinde ortak paketlere çok fazla öğe ekleyin. İçerik yönetimi hakkında daha fazla bilgi edinmek için Adresler için bkz. Adreslenebilir öğeler ile içerik yönetiminizi basitleştirin.
Faturalandırma hesabınızdaki ücretleri takip etmek için
farklı bir demoya gönül rahatlığıyla
konusunda rahat hissetmelerine neden olabilir. Buradan ayrıca açık kaynak projesini de
Unity 2019.3 ve daha yeni sürümler için BuildLayout Explorer'ı kullanıyorsanız
ve Google'dan buildlayout.txt
Adresler.
Bir Unity Açık Projesi olan Chop Chop'un öğeleri Tüm yükleme ve boşaltma işlemleri için adreslenebilirler sistemi. Görüntüleyin Adreslenebilir Öğeler ile içerik paketleme | Projects Devlog'u aç adreslenebilir öğeleri yapılandırmaya ve ayarlamaya yönelik adım adım açıklamalı kılavuz paket.
Chop Chop projesinde varsayılan olarak yüklenen tek sahne, Başlatma
sahnedeki öğelere doğrudan bağlantılar yerine AssetReferences
kullanacak şekilde yapılandırıldı.
(ör. sahneler, ön-faydalar vb.)
Şunun için kaynak kodu: Unity Açık Projesi: Chop Chop GitHub'da bulabilirsiniz. Proje artık geliştirme aşamasında olmasa da dokümanlara erişim olanağı sunulur.
Üçüncü taraf eklentileri
Unity Öğesi'ndekiler gibi üçüncü taraf eklentileri kullanıyorsanız Store, klasörleri inceleyin ve gereksiz öğeleri Resources (Kaynaklar) klasörleri. Derleme işlemi sırasında Unity, Resources (Kaynaklar) klasörlerinde bulunan öğeler ve bunları tek bir pakette paketleyen erişilebilir bir pakettir. Bu, nihai pakete şişkinlik ekleyebilir. genellikle gerekmez.
Tüm kaynak klasörlerini hızlıca bulmak için Google’da Kaynaklar’ı Proje kontrol edebilirsiniz. Daha sonra her birini seçerek içeriğin ne içerdiğini ve gerekli.
Yayınlama ve yönetme
Mobil oyununuzu kullanıma sunmaya hazır olduğunuzda kimi istediğinize karar verin alfa ve beta testi yapılması, izlenmesi ve izlenmesi performansı artırır.
Sınırlı bir sürümden gelen geri bildirimleri analiz etme
Sınırlı, hedeflenen bir kitleye yönelik olarak daha büyük ölçekli bir beta program yürütebilirsiniz. test edin veya oyununuzu tüm pazarlarda tam olarak kullanabilmek için etkinleştirin. Şununla uygulamanızın performansını daha geniş ve daha spesifik bir sürüme göre ayarlayabilirsiniz. canlı kitle ve cihaz koleksiyonu var.
Örneğin, Unity için Android Performance Tuner ve Unity İçin Google Analytics uygulama performansınız ile oyuncu trendleri hakkında bilgi edinmek için bu araçları geliştirme ekibiniz tarafından incelenebilir ve güncellemeler iletilebilir. Ayrıca veya analitik veri analizi araçlarını kullanarak benzer bir türdeki ilgili oyunlar.
Alfa ve beta testi
Şurada uygulama profilinizi oluşturduktan sonra: Google Play Console'u kullanıyorsanız, alfa ve beta testi derlemelerini oluşturur ve bunları, incelemeden geçemeyeceğiz. Ölçüt erişimi sunduğunuzda, nihai sorunları daha geniş bir kitleyle, hareket etmeden önce yanıt verebileceğiniz ilk geri bildirimleri toplayın. global bir sürümde yayınlanacaktır.
Unity derlemeleriniz Android App Bundle üzerinden dağıtılır. Bilgi için bkz. Manuel: Google Play'e yayınlama hakkında daha fazla bilgi edinin. Bu makale, APK dosyalarından AAB'ye yapılan değişiklikleri de açıklar biçimindedir.
İzleme ve takip etme
Oyununuzun LiveOps ve dağıtım aşamasında Android'i Takip etmeye yardımcı olacak vitals sırasında erişemeyebileceğiniz cihazlardaki performans sorunlarının azalması ürün geliştirme ve test süreci. Ayrıntılı bilgi için Erişim, Cihazlar ve Android vitals'daki oyunlardaki yenilikler.
Genellikle daha büyük geliştirme ekiplerinin benzersiz ve özel oyun telemetri ardışık düzenleri vardır cihaz performansıyla ilgili metrikler sağlayan araçlardır. Avantajlardan yararlanma Android Performance Tuner (APT) ve kare hızlarıyla ilgili telefonla katılım metriklerine ilişkin ilgili Unity eklentisi grafik doğruluğu, yükleme süresi ve yüklemeden vazgeçme. Şunu izleyin: adım adım açıklamalı kılavuza Android Performance Tuner'ı Unity oyununuza entegre etme.
Oyununuzun yaşam döngüsü, yayınlandıktan sonra sona ermez. Performans ve geri bildirimleri izlemek, sürdürmek ve bunlara yanıt vermek çok önemlidir mutlu kullanıcılar, olumlu yorumlar ve oyununuzun en iyi şekilde benimsenmesini tüm pazarlarda geçerlidir.