Vấn đề về độ phân giải khi chuyển trò chơi Unity sang Android


9

Vì vậy, lần đầu tiên tôi chuyển một trò chơi sang Android trong Unity3D. Và tôi đã gặp một vài vấn đề trên đường đi. Vấn đề hiện tại của tôi là độ phân giải dường như không đúng, nó cắt các cạnh của màn hình và các điểm dừng cuộn của tôi để cuộn màn hình sang trái / phải không còn ở đúng vị trí.

Sau khi thực hiện một chút nghiên cứu, rất nhiều người nói rằng bạn cần phải tạo trò chơi Độ phân giải độc lập để có thể chạy trên tất cả Android / Iphone / Ipad. Điều này có đúng không? Nếu vậy, làm thế nào để tôi làm điều đó? Nếu không, làm thế nào tôi có thể giúp sửa độ phân giải để khi tôi chuyển sang thiết bị di động thì nó có đúng không?

EDIT: Tôi vẫn không thực sự có những gì tôi cần, các nghị quyết vẫn không hoạt động đúng ngay cả với mã và thủ thuật được liệt kê bên dưới. Tôi cần một số cách để độ phân giải điều chỉnh dựa trên thiết bị. Vì một số lý do khi tôi cố truy xuất độ phân giải của thiết bị bằng mã của Mungoid, nó trả về 0x0


1
Bạn sẽ cần phải đi qua bất kỳ đoạn mã nào có độ phân giải màn hình nhất định và thay đổi nó để có thể lấy độ phân giải màn hình hiện tại và làm một cái gì đó với nó. Tùy thuộc vào những gì bạn đang làm và làm thế nào, không có giải pháp một kích cỡ phù hợp cho tất cả.
Tetrad

Theo như chi tiết cụ thể, câu hỏi này đi vào một số chi tiết (có rất nhiều câu hỏi về vấn đề này trên trang web) gamedev.stackexchange.com/questions/51/ Lỗi
Tetrad

Ahh, về cơ bản những gì Namar nói: "Hãy chắc chắn rằng bạn đặt mọi thứ với tỷ lệ. Ví dụ: một thanh sức khỏe sẽ được đặt ở 80% chiều rộng màn hình với 10% chiều rộng màn hình cho tỷ lệ ngang của nó" để tôi có thể sửa tham chiếu khu vực cụ thể trong không gian? Cuộn màn hình của tôi dựa trên các khu vực cụ thể trong không gian thế giới, nhưng điều đó dường như bị rối tung với những thay đổi độ phân giải.
Timothy Williams

Bạn có thể cụ thể hơn về vấn đề của bạn? Bạn nói độ phân giải "dường như không đúng" và "vẫn tắt" - nhưng độ phân giải màn hình thường là thuộc tính cố định của thiết bị. Vì vậy, đó không phải là độ phân giải sai, mà là cách bạn kết xuất màn hình. Nếu bạn đưa ra các giả định về độ rộng và cao của màn hình, bạn sẽ luôn gặp rắc rối trên các thiết bị và tỷ lệ khung hình khác nhau.
Kylotan

Tôi đoán thực sự những gì tôi đang cố gắng làm là viết mã để tìm độ phân giải thấp nhất, đặt trò chơi theo đó và chia tỷ lệ cho tất cả các đối tượng tương ứng. Tôi biết cách đặt tỷ lệ của sân chơi, nhưng dường như tôi không thể có được độ phân giải của thiết bị. do đó, trò chơi "quá phóng to" hoặc mọi thứ quá lớn.
Timothy Williams

Câu trả lời:


7

Một vấn đề bạn sẽ gặp phải với Android là mọi thiết bị khác nhau đều có kích thước màn hình, độ phân giải và mật độ pixel riêng. Nếu bạn muốn trò chơi của mình trông giống hệt nhau trên tất cả các thiết bị, bạn sẽ làm rất nhiều việc và có lẽ sẽ không bao giờ hài lòng với kết quả này. Trò chơi sẽ xuất hiện trải dài trên màn hình rộng hoặc được nén trên màn hình không rộng. Tôi đề nghị bạn quyết định những gì thực sự quan trọng và để bất cứ điều gì khác trượt một chút.

Không có bất kỳ ảnh chụp màn hình hoặc kiến ​​thức nào về trò chơi của bạn và nó trông như thế nào, chúng ta đều có thể suy đoán các giải pháp nhưng chúng tôi không có hướng cụ thể để cung cấp cho bạn lời khuyên cụ thể.

Trong Unity, bạn có thể truy cập kích thước của màn hình hiện tại bằng lớp Màn hình : Screen.widthScreen.height(trong số các thuộc tính khác). Sau đó, bạn có thể thay đổi tỷ lệ khung hình của Máy ảnh để thay đổi những gì hiển thị trên các màn hình có kích thước khác nhau của bạn dựa trên kích thước màn hình và mong muốn cá nhân của bạn về những gì sẽ hiển thị.

Nếu bạn cần đảm bảo mọi màn hình HUD được thu nhỏ đúng cách, bạn có thể làm điều đó bằng cách thay đổi ma trận biến đổi GUI dựa trên kích thước của màn hình trong mọi OnGUI()chức năng. Tôi đã thực hiện nó trước đây bằng cách tạo tập lệnh đơn giản này và đính kèm nó vào bất cứ thứ gì thể hiện các thành phần GUI mà tôi muốn thu nhỏ:

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

Sau đó, trong OnGUI()(các) hàm thực tế , tôi đặt ma trận biến đổi ngay lập tức:

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

Đặt tỷ lệ khung hình của máy ảnh dựa trên chiều rộng và chiều cao màn hình không giúp ích gì, khi điện thoại thẳng đứng, nó hoàn toàn không hiển thị và khi điện thoại nằm ngang, nó hiển thị chính xác như trước. Trò chơi được chia thành ba phần, bạn di chuyển mượt mà giữa các phần bằng ngón tay (Giống như trong Angry Birds), đây là hình ảnh bên trái được cho là trông như thế nào. Và giữa . Đây là phía bên trái khi điện thoại của tôi được giữ theo chiều dọc ,
Timothy Williams

Và đây là chiều ngang . Hy vọng rằng những hình ảnh này có thể giúp ích, đây là lần đầu tiên tôi chuyển từ Unity sang Android, hoặc thậm chí làm một trò chơi Android. Tôi hơi bị lạc lõng.
Timothy Williams

Đánh giá theo (giải thích của tôi) về những giải thích của bạn và hình ảnh của bạn, vấn đề không phải là giải quyết; máy ảnh của bạn không ở vị trí có thể hiển thị mọi thứ bạn muốn trên màn hình nhỏ. Làm cho cấp độ của bạn nhỏ hơn hoặc di chuyển máy ảnh của bạn trở lại để hiển thị nhiều hơn hoặc một cái gì đó. Tôi khuyên bạn nên đặt cửa sổ trò chơi của mình ở kích thước nhỏ hơn nhiều để thể hiện kích thước của một thiết bị thực tế thay vì kích thước 1230x530ish mà bạn có bây giờ để bạn có thể cảm nhận về những gì bạn sẽ thấy khi bạn đẩy nó lên.
chaosTechnician

Vấn đề là tôi đã thu nhỏ camera khá nhiều. Nếu vấn đề này sẽ kéo dài, làm thế nào tôi có thể tính toán chính xác cho các màn hình và kích cỡ khác nhau và sửa đổi nó?
Timothy Williams

@TimothyWilliams, bạn có thể giải quyết vấn đề bằng cách chọn độ phân giải tối thiểu (800x600 hoặc thứ gì đó) mà trò chơi của bạn hoạt động. Sau đó, sử dụng Screen.width.heightsong song với Camera.fieldOfViewCamera.aspectđể tái tạo cùng một chế độ xem trên các kích thước màn hình tùy ý. Nó sẽ chỉ cần một số trig để tìm ra cách cụ thể để làm điều đó.
hỗn loạn Kỹ thuật viên

0

bạn có thể thử một cái gì đó như sau và áp dụng nó. Tôi đoán rằng một thiết bị di động chỉ nên trả về một độ phân giải.

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

Ngoài ra, hãy xem tại đây để biết thêm thông tin về Màn hình trong sự thống nhất http://unity3d.com/support/documentation/ScriptReference/Screen.html


Điều này không giúp tôi, độ phân giải vẫn còn.
Timothy Williams

Nó trả về "0x0" trên Android của tôi vì một số lý do ...
Timothy Williams
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.