Masalah resolusi saat porting game Unity ke Android

9

Jadi, saya porting game ke Android untuk pertama kalinya di Unity3D. Dan saya telah mengalami beberapa masalah di sepanjang jalan. Masalah saya saat ini adalah resolusinya sepertinya tidak benar, memotong tepi layar dan scrolling stops saya untuk menggulir layar ke kiri / kanan tidak lagi berada di tempat yang tepat.

Setelah melakukan sedikit riset, banyak orang mengatakan Anda perlu membuat Resolusi permainan Anda agar dapat berjalan di semua Android / Iphone / Ipad. Apakah ini benar? Jika demikian, bagaimana cara saya melakukan itu? Jika tidak, bagaimana saya bisa membantu memperbaiki resolusi sehingga ketika saya porting ke perangkat seluler itu terlihat benar?

EDIT: Saya masih belum benar-benar memiliki apa yang saya butuhkan, resolusi masih tidak berfungsi dengan baik bahkan dengan kode dan trik yang tercantum di bawah ini. Saya perlu cara untuk menyesuaikan resolusi berdasarkan perangkat. Untuk beberapa alasan ketika saya mencoba untuk mengambil resolusi perangkat menggunakan kode Mungoid itu mengembalikan 0x0

Timothy Williams
sumber
1
Anda harus memeriksa sedikit kode yang mengasumsikan resolusi layar tertentu dan mengubahnya sehingga dapat mengambil resolusi layar saat ini dan melakukan sesuatu dengannya. Bergantung pada apa yang Anda lakukan dan bagaimana, tidak ada solusi satu ukuran untuk semua.
Tetrad
Sejauh spesifik, pertanyaan ini masuk ke beberapa detail (ada banyak pertanyaan tentang ini di situs) gamedev.stackexchange.com/questions/51/…
Tetrad
Ahh, jadi pada dasarnya apa yang dikatakan Namar: "Pastikan Anda menempatkan semuanya dengan rasio. Misalnya bilah kesehatan akan ditempatkan di 80% dari lebar layar dengan 10% dari lebar layar untuk skala horizontal" jadi bagaimana saya bisa memperbaiki referensi area spesifik dalam ruang? Pengguliran layar saya didasarkan pada area spesifik di ruang dunia, tetapi itu tampaknya kacau dengan perubahan resolusi.
Timothy Williams
Bisakah Anda lebih spesifik tentang masalah Anda? Anda mengatakan resolusi "tampaknya tidak benar" dan itu "masih mati" - tetapi resolusi layar biasanya merupakan properti tetap perangkat. Jadi bukan resolusi yang salah, tetapi cara Anda merender layar. Jika Anda membuat asumsi tentang seberapa lebar dan tinggi layar, Anda akan selalu mengalami masalah pada berbagai perangkat dan rasio aspek.
Kylotan
Saya kira benar-benar apa yang saya coba lakukan adalah menulis kode untuk menemukan resolusi terendah, mengatur permainan untuk itu, dan skala semua objek yang sesuai. Saya tahu cara mengatur skala playfield, tapi sepertinya saya tidak bisa mendapatkan resolusi perangkat. Oleh karena itu permainan "terlalu diperbesar", atau semuanya terlalu besar.
Timothy Williams

Jawaban:

7

Masalah yang akan Anda hadapi dengan Android adalah bahwa setiap perangkat berbeda memiliki ukuran layar, resolusi, dan kerapatan pikselnya sendiri. Jika Anda ingin gim Anda terlihat identik di semua perangkat, Anda harus banyak bekerja dan mungkin tidak akan pernah puas dengan hasilnya. Entah permainan akan tampak melebar pada tampilan layar lebar atau dikompresi pada yang non-layar lebar. Saya sarankan Anda memutuskan apa yang benar-benar penting dan membiarkan hal lain sedikit meluncur.

Tanpa tangkapan layar atau pengetahuan tentang apa gim Anda dan seperti apa gimnya, kami semua dapat berspekulasi solusi tetapi kami tidak memiliki arahan khusus untuk memberi Anda nasihat khusus.

Di Unity, Anda dapat mengakses dimensi layar saat ini dengan kelas Layar : Screen.widthdan Screen.height(di antara properti lainnya). Anda kemudian dapat mengubah Kamera rasio aspek untuk mengubah apa yang terlihat pada layar Anda yang berukuran berbeda berdasarkan dimensi layar dan harapan pribadi Anda tentang apa yang seharusnya terlihat.

Jika Anda perlu memastikan tampilan HUD diskalakan dengan benar, Anda dapat melakukannya dengan mengubah matriks transformasi GUI berdasarkan dimensi layar di setiap OnGUI()fungsi. Saya telah melakukannya sebelumnya dengan membuat skrip sederhana ini dan melampirkannya pada apa pun yang menghasilkan elemen GUI yang ingin saya diskalakan:

//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;
}

Kemudian, dalam OnGUI()fungsi aktual , saya langsung mengatur matriks transformasi:

function OnGUI()
{
    GUI.matrix = guiScale.GetGUIMatrix();
    /* Everything Else */
}
chaosTechnician
sumber
Mengatur rasio aspek kamera berdasarkan lebar dan tinggi layar tidak membantu, ketika telepon vertikal tidak muncul sama sekali dan ketika telepon horisontal itu menunjukkan sama persis seperti sebelumnya. Gim ini dibagi menjadi tiga bagian, Anda dengan lancar menggulir di antara bagian-bagian dengan jari Anda (Seperti di Angry Birds), inilah gambar tampilan sisi kiri seharusnya. Dan tengah . Inilah sisi kiri ketika ponsel saya dipegang secara vertikal ,
Timothy Williams
Dan ini secara horizontal . Semoga foto-foto ini dapat membantu, ini adalah pertama kalinya saya porting dari Unity ke Android, atau bahkan membuat game Android. Saya agak bingung.
Timothy Williams
Menilai dengan (interpretasi saya atas) penjelasan dan gambar Anda, masalahnya bukan resolusi; kamera Anda tidak berada di lokasi yang mungkin dapat menampilkan semua yang Anda inginkan di layar kecil. Buat level Anda lebih kecil atau gerakkan kamera Anda ke belakang untuk menampilkan lebih banyak atau sesuatu. Saya sarankan mengatur jendela permainan Anda ke ukuran yang jauh lebih kecil untuk mewakili ukuran perangkat yang sebenarnya, bukan ukuran 1230x530ish yang Anda miliki sekarang sehingga Anda bisa merasakan apa yang akan Anda lihat ketika Anda mendorongnya.
chaosTechnician
Masalahnya adalah saya sudah memperkecil kamera secara substansial. Jika masalah ini tetap ada, bagaimana saya dapat secara akurat menjelaskan berbagai layar dan ukuran dan mengubahnya?
Timothy Williams
@TimothyWilliams, Anda mungkin bisa menyelesaikan sesuatu dengan memilih resolusi minimal (800x600 atau sesuatu) yang bisa digunakan gim Anda. Kemudian, gunakan Screen.widthdan .heightbersama-sama dengan Camera.fieldOfViewdan Camera.aspectuntuk mereproduksi tampilan yang sama pada ukuran layar sewenang-wenang. Itu hanya akan memerlukan beberapa pemicu untuk bekerja secara khusus bagaimana melakukannya.
chaosTechnician
0

Anda dapat mencoba sesuatu seperti yang berikut ini dan menerapkannya. Saya kira perangkat seluler seharusnya hanya mengembalikan satu resolusi.

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);
};

Lihat juga di sini untuk info lebih lanjut tentang Layar dalam kesatuan http://unity3d.com/support/documentation/ScriptReference/Screen.html

Mungoid
sumber
Ini tidak membantu saya, resolusi masih mati.
Timothy Williams
Ia mengembalikan "0x0" di Android saya untuk beberapa alasan ...
Timothy Williams