Bir Unity oyununu Android'e taşırken çözünürlük sorunları


9

Bu yüzden, Unity3D'de ilk kez bir oyunu Android'e taşıyorum. Ve yol boyunca birkaç sorunla karşılaştım. Şu anki sorunum çözünürlük doğru görünmüyor, ekranın kenarlarını kesiyor ve ekranı sola / sağa kaydırmak için kaydırma duraklarım artık doğru yerde değil.

Biraz araştırma yaptıktan sonra, birçok kişi tüm Android'lerde / Iphone / Ipad'de çalışabilmek için oyununuzu Çözünürlük Bağımsız hale getirmeniz gerektiğini söylüyor. Bu doğru mu? Öyleyse, bunu nasıl yapabilirim? Değilse, mobil cihazlara bağlantı yaptığımda doğru görünmesi için çözünürlüğü düzeltmeye nasıl yardımcı olabilirim?

EDIT: Hala gerçekten ihtiyacım olan şey yok, çözünürlükler aşağıda listelenen kod ve püf noktaları ile bile düzgün çalışmıyor. Çözünürlüğün cihaza göre ayarlanması için bir yol lazım. Nedense Mungoid'in kodunu kullanarak bir cihazın çözünürlüğünü almaya çalıştığınızda 0x0 döndürür


1
Belirli bir ekran çözünürlüğünü kabul eden herhangi bir kod parçasından geçmeniz ve geçerli ekran çözünürlüğünü alabilmesi ve onunla bir şeyler yapabilmesi için değiştirmeniz gerekir. Ne yaptığınıza ve nasıl yaptığınıza bağlı olarak, herkese uyan tek bir çözüm yoktur.
Tetrad

Spesifik olarak, bu soru bazı ayrıntılara girer (sitede bu konuda birçok soru vardır) gamedev.stackexchange.com/questions/51/…
Tetrad

Ahh, temelde Namar'ın söylediği gibi: "Her şeyi oranlarla yerleştirdiğinizden emin olun. Örneğin, yatay genişliğinin ekran genişliğinin% 10'u ile ekran genişliğinin% 80'ine bir sağlık çubuğu yerleştirilir", bu yüzden referansı nasıl düzeltebilirim uzayda belirli alanlar? Ekran kaydırmam dünyadaki belirli alanlara dayanıyor, ancak çözünürlük değişiklikleriyle karıştırılıyor gibi görünüyor.
Timothy Williams

Sorununuz hakkında daha açık olabilir misiniz? Çözünürlük "doğru görünmüyor" ve "hala kapalı" diyorsunuz - ancak ekran çözünürlüğü genellikle cihazın sabit bir özelliğidir. Yani yanlış olan çözünürlük değil, ekrana görüntüleme şekliniz. Ekranın ne kadar geniş ve yüksek olduğu konusunda varsayımlar yaparsanız, farklı cihazlarda ve en boy oranlarında her zaman sorun yaşarsınız.
Kylotan

Gerçekten yapmaya çalıştığım en düşük çözünürlüğü bulmak için bir kod yazmak, oyunu buna ayarlamak ve buna göre tüm nesneleri ölçeklendirmek. Oyun alanının ölçeğini nasıl ayarlayacağımı biliyorum, ancak cihazın çözünürlüğünü alamıyorum. bu nedenle oyun "çok yakınlaştırılmış" veya her şey çok büyük.
Timothy Williams

Yanıtlar:


7

Android ile karşılaşacağınız bir sorun, her farklı cihazın kendi ekran boyutuna, çözünürlüğüne ve piksel yoğunluğuna sahip olmasıdır. Oyununuzun tüm cihazlarda aynı görünmesini istiyorsanız, çok fazla iş içindesiniz ve muhtemelen sonuçlardan asla memnun olmayacaksınız. Oyun geniş ekranlarda uzatılmış veya geniş ekran olmayanlarda sıkıştırılmış olarak görünecektir. Neyin gerçekten önemli olduğuna karar vermenizi ve başka bir şeyin biraz kaymasına izin vermenizi öneririm.

Oyununuzun ne olduğu ve neye benzediği hakkında herhangi bir ekran görüntüsü veya bilgi olmadan, hepimiz çözümler üzerinde spekülasyon yapabiliriz, ancak size özel bir danışmanlık vermek için belirli bir yönümüz yoktur.

Unity'de geçerli ekranın boyutlarına Screen sınıfı: Screen.widthve Screen.height(diğer özelliklerin yanı sıra) ile erişebilirsiniz . Ardından , ekran boyutlarına ve neyin görünür olması gerektiğine ilişkin kişisel beklentinize bağlı olarak farklı boyutlu ekranlarınızda görünenleri değiştirmek için Kameranın en boy oranını değiştirebilirsiniz.

Herhangi bir HUD ekranının doğru şekilde ölçeklendiğinden emin olmanız gerekiyorsa, bunu her işlevdeki ekran boyutlarına göre GUI dönüşüm matrisini değiştirerek yapabilirsiniz OnGUI(). Bu basit komut dosyasını yaparak ve ölçeklemek istediğim GUI öğelerini işleyen herhangi bir şeye ekleyerek daha önce yaptım:

//GUI values in code are assigned based on an 800x600 screen
private var nativeWidth : float = 800.0f;  
private var nativeHeight : float = 600.0f;
private var guiMatrix : Matrix4x4;

function Start () 
{
    var scale : Vector3 = Vector3(Screen.width / nativeWidth, 
                                  Screen.height / nativeHeight,
                                  1.0f);
    guiMatrix = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, scale);
}

function GetGUIMatrix() : Matrix4x4
{
    return guiMatrix;
}

Ardından, gerçek OnGUI()işlev (ler) de, dönüştürme matrisini hemen ayarladım:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}

Kameranın en boy oranını ekran genişliği ve yüksekliğine göre ayarlamak yardımcı olmaz, telefon dikey olduğunda hiç göstermez ve telefon yatay olduğunda önceki ile aynı şekilde gösterilir. Oyun üç bölümlerine kadar bölünür, sen smoothely parmağınızla (Angry Birds gibi) ile bölümler arasında gezinmek burada sol taraf gibi bakmak gerekiyordu şeyin bir resmi. Ve ortada . Telefonum dikey olarak tutulduğunda sol taraf ,
Timothy Williams

Ve burada yatay . Umarım bu resimler yardımcı olabilir, bu benim Unity'den Android'e ilk kez taşıma, hatta bir Android oyunu yapma. Ben biraz kayboldum.
Timothy Williams

Açıklamalarınıza ve resimlerinize (benim yorumuma) bakılırsa, sorun çözüm değildir; kameranız istediğiniz her şeyi küçük bir ekranda gösterebilecek bir konumda değil. Seviyelerinizi küçültün veya daha fazla şey göstermek için kameranızı geri hareket ettirin. Oyun pencerenizi , şimdi sahip olduğunuz 1230x530ish boyutu yerine gerçek bir cihaz boyutunu temsil etmek için çok daha küçük bir boyuta ayarlamanızı öneririm, böylece onu ittiğinizde göreceğiniz şey hakkında bir fikir edinebilirsiniz.
chaosTechnician

Sorun zaten kamerayı oldukça önemli ölçüde uzaklaştırdım. Bu sorun devam ederse, çeşitli ekranları ve boyutları doğru bir şekilde nasıl açıklayabilirim ve bu konuda nasıl değişiklik yapabilirim?
Timothy Williams

@TimothyWilliams, muhtemelen oyununuzun çalıştığı minimum çözünürlüğü (800x600 veya başka bir şey) seçerek bir şeyler yapabilirsiniz. Ardından, kullanmak Screen.widthve .heighttandem Camera.fieldOfViewve Camera.aspectkeyfi ekran boyutlarında aynı görünüm çoğaltmak. Sadece nasıl yapılacağını çözmek için biraz trig gerektirir .
chaosTechnician

0

aşağıdakine benzer bir şey deneyebilir ve uygulayabilirsiniz. Bir mobil cihazın yalnızca bir çözünürlük döndürmesi gerektiğini tahmin ediyorum.

function Start()
{
    var resolutions : Resolution[] = Screen.resolutions;
    // Print the resolutions
    for (var res in resolutions) {
        print(res.width + "x" + res.height);
    }
    // Switch to the lowest supported fullscreen resolution
    Screen.SetResolution (resolutions[0].width, resolutions[0].height, true);
};

Ayrıca birlikteki Ekran hakkında daha fazla bilgi için buraya bakın http://unity3d.com/support/documentation/ScriptReference/Screen.html


Bu bana yardımcı olmadı, çözünürlük hala kapalı.
Timothy Williams

Herhangi bir nedenden dolayı Android'de "0x0" döndürüyor ...
Timothy Williams
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.