แก้ไขปัญหาเมื่อทำการย้ายเกม Unity ไปยัง Android


9

ดังนั้นฉันจึงย้ายเกมไปยัง Android เป็นครั้งแรกใน Unity3D และฉันก็เจอปัญหาเล็กน้อยระหว่างทาง ปัญหาปัจจุบันของฉันคือความละเอียดดูเหมือนจะไม่ถูกต้องมันตัดขอบของหน้าจอและการหยุดการเลื่อนของฉันสำหรับการเลื่อนหน้าจอซ้าย / ขวาไม่ได้อยู่ในตำแหน่งที่ถูกต้องอีกต่อไป

หลังจากทำวิจัยเล็กน้อยผู้คนจำนวนมากบอกว่าคุณต้องทำให้เกมของคุณมีความละเอียดอิสระเพื่อให้สามารถทำงานบน Androids / Iphone / Ipad ทั้งหมดได้ มันเป็นเรื่องจริงเหรอ? ถ้าเป็นเช่นนั้นฉันจะทำยังไงต่อ ถ้าไม่ฉันจะแก้ไขปัญหาได้อย่างไรเมื่อฉันพอร์ตไปยังอุปกรณ์มือถือมันดูถูกต้อง?

แก้ไข: ฉันยังไม่มีสิ่งที่ฉันต้องการจริงๆการแก้ปัญหายังทำงานไม่ถูกต้องแม้ว่าจะมีรหัสและลูกเล่นที่แสดงด้านล่าง ฉันต้องการวิธีในการปรับความละเอียดตามอุปกรณ์ ด้วยเหตุผลบางอย่างเมื่อฉันพยายามดึงความละเอียดของอุปกรณ์โดยใช้รหัสของ Mungoid มันจะคืนค่า 0x0


1
คุณจะต้องผ่านโค้ดใด ๆ ที่ถือว่ามีความละเอียดหน้าจอที่แน่นอนและเปลี่ยนมันเพื่อให้สามารถใช้ความละเอียดหน้าจอปัจจุบันและทำอะไรกับมัน ขึ้นอยู่กับสิ่งที่คุณทำและวิธีไม่มีวิธีการหนึ่งขนาดเหมาะกับทุกคน
Tetrad

คำถามนี้มีรายละเอียดบางอย่าง (มีคำถามมากมายเกี่ยวกับเรื่องนี้ในเว็บไซต์) gamedev.stackexchange.com/questions/51/…
Tetrad

Ahh ดังนั้นโดยทั่วไปสิ่งที่นามาร์กล่าวว่า "ให้แน่ใจว่าคุณวางทุกอย่างด้วยอัตราส่วนตัวอย่างเช่นแถบสุขภาพจะถูกวางไว้ที่ 80% ของความกว้างของหน้าจอและ 10% ของความกว้างของหน้าจอในแนวนอน" ดังนั้นฉันจะแก้ไขการอ้างอิงได้อย่างไร พื้นที่เฉพาะในอวกาศ? การเลื่อนหน้าจอของฉันไปตามพื้นที่เฉพาะในพื้นที่โลก แต่ดูเหมือนว่าจะสับสนกับการเปลี่ยนแปลงความละเอียด
Timothy Williams

คุณช่วยระบุปัญหาของคุณได้มากกว่านี้ไหม? คุณบอกว่าความละเอียด "ดูเหมือนจะไม่ถูกต้อง" และเป็น "ปิด" - แต่ความละเอียดหน้าจอมักจะเป็นคุณสมบัติถาวรของอุปกรณ์ ดังนั้นไม่ใช่ความละเอียดที่ผิด แต่เป็นวิธีที่คุณแสดงผลบนหน้าจอ หากคุณตั้งสมมติฐานว่าหน้าจอกว้างและสูงคุณจะมีปัญหากับอุปกรณ์และอัตราส่วนภาพที่แตกต่างกัน
Kylotan

ฉันเดาจริงๆสิ่งที่ฉันพยายามทำคือเขียนรหัสเพื่อค้นหาความละเอียดต่ำสุดตั้งค่าเกมเป็นเกมนั้นและปรับขนาดวัตถุทั้งหมดตามลำดับ ฉันรู้วิธีกำหนดขนาดของสนามเด็กเล่น แต่ฉันไม่สามารถรับความละเอียดของอุปกรณ์ได้ ดังนั้นเกมคือ "ซูมเกินไป" หรือทุกอย่างมันใหญ่เกินไป
ทิโมธีวิลเลียมส์

คำตอบ:


7

ปัญหาที่คุณจะพบกับ Android คืออุปกรณ์ทุกเครื่องมีขนาดหน้าจอความละเอียดและความหนาแน่นของพิกเซลของตัวเอง หากคุณต้องการให้เกมของคุณมีลักษณะเหมือนกันทุกอุปกรณ์คุณจะต้องทำงานหนักและอาจไม่พอใจกับผลลัพธ์ เกมดังกล่าวจะปรากฏบนหน้าจอไวด์สกรีนหรือบีบอัดบนหน้าจอที่ไม่ใช่แบบไวด์สกรีน ฉันขอแนะนำให้คุณตัดสินใจว่าอะไรสำคัญจริง ๆ และปล่อยให้สิ่งอื่นเลื่อนเล็กน้อย

หากไม่มีภาพหน้าจอหรือความรู้เกี่ยวกับเกมของคุณและสิ่งที่ดูเหมือนว่าเราทุกคนสามารถคาดเดาวิธีการแก้ปัญหา แต่เราไม่มีทิศทางที่เฉพาะเจาะจงเพื่อให้คำแนะนำเฉพาะคุณ

ใน Unity คุณสามารถเข้าถึงขนาดของหน้าจอปัจจุบันด้วยคลาสScreen : Screen.widthและScreen.height(ในบรรดาคุณสมบัติอื่น ๆ ) จากนั้นคุณสามารถเปลี่ยนอัตราส่วนภาพของกล้องเพื่อเปลี่ยนสิ่งที่ปรากฏบนหน้าจอขนาดต่าง ๆ ของคุณตามขนาดหน้าจอและความคาดหวังส่วนบุคคลของคุณเกี่ยวกับสิ่งที่ควรมองเห็น

หากคุณต้องการให้แน่ใจว่าการแสดง HUD ใด ๆ ถูกปรับขนาดอย่างเหมาะสมคุณสามารถทำได้โดยการเปลี่ยนเมทริกซ์การแปลง GUIตามขนาดของหน้าจอในทุกOnGUI()ฟังก์ชั่น ฉันเคยทำมาก่อนโดยการสร้างสคริปต์ง่าย ๆ นี้แล้วแนบไปกับทุกสิ่งที่แสดงองค์ประกอบ GUI ที่ฉันต้องการลดขนาด:

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

จากนั้นในOnGUI()ฟังก์ชั่นที่แท้จริงฉันตั้งเมทริกซ์การแปลงทันที:

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

การตั้งค่าอัตราส่วนภาพของกล้องตามความกว้างและความสูงของหน้าจอไม่ได้ช่วยเมื่อโทรศัพท์อยู่ในแนวตั้งจะไม่แสดงเลยและเมื่อโทรศัพท์อยู่ในแนวนอนมันจะแสดงแบบเดียวกันทุกครั้ง เกมดังกล่าวแบ่งออกเป็นสามส่วนคุณเลื่อนนิ้วไปมาระหว่างส่วนต่าง ๆ ได้อย่างราบรื่น (เช่นเดียวกับ Angry Birds) นี่คือรูปภาพของสิ่งที่ด้านซ้ายควรมีลักษณะ และกลาง นี่คือด้านซ้ายเมื่อโทรศัพท์ของฉันที่จะจัดขึ้นในแนวตั้ง ,
ทิโมธีวิลเลียมส์

และนี่คือแนวนอน หวังว่าภาพเหล่านี้สามารถช่วยได้นี่เป็นครั้งแรกที่ฉันได้ทำการย้ายจาก Unity ไปยัง Android หรือแม้แต่การสร้างเกม Android ฉันหลงทางนิดหน่อย
Timothy Williams

ตัดสินโดย (การตีความของฉัน) คำอธิบายและรูปภาพของคุณปัญหาไม่ได้แก้ไข; กล้องของคุณไม่ได้อยู่ในตำแหน่งที่สามารถแสดงทุกสิ่งที่คุณต้องการบนหน้าจอขนาดเล็ก ทำให้ระดับของคุณเล็กลงหรือเลื่อนกล้องของคุณกลับมาเพื่อแสดงอะไรบางอย่าง ฉันขอแนะนำให้ตั้งค่าหน้าต่างเกมของคุณให้มีขนาดเล็กลงมากเพื่อแสดงขนาดของอุปกรณ์จริงแทนขนาด 1230x530 ที่คุณมีในขณะนี้เพื่อให้คุณรู้สึกถึงสิ่งที่คุณเห็นเมื่อผลักดัน
chaosTechnician

ปัญหาคือฉันได้ซูมกล้องออกมาค่อนข้างมากแล้ว หากปัญหานี้ยังคงอยู่ฉันจะสามารถอธิบายหน้าจอและขนาดต่าง ๆ และแก้ไขได้อย่างไร
ทิโมธีวิลเลียมส์

@ TimothyWilliams คุณอาจจะได้ผลบางอย่างโดยการเลือกความละเอียดขั้นต่ำ (800x600 หรือบางอย่าง) ที่เกมของคุณทำงานด้วย จากนั้นใช้Screen.widthและ.heightควบคู่กับCamera.fieldOfViewและCamera.aspectเพื่อสร้างมุมมองเดียวกันบนขนาดหน้าจอที่กำหนดเอง มันแค่ต้องการทริกเกอร์เพื่อหาวิธีทำ
chaosTechnician

0

คุณสามารถลองสิ่งต่อไปนี้และนำไปใช้ได้ ฉันเดาว่าอุปกรณ์มือถือควรส่งคืนความละเอียดเดียวเท่านั้น

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

ดูที่นี่สำหรับข้อมูลเพิ่มเติมเกี่ยวกับหน้าจอด้วยความสามัคคีhttp://unity3d.com/support/documentation/ScriptReference/Screen.html


สิ่งนี้ไม่ได้ช่วยฉันความละเอียดยังคงปิดอยู่
Timothy Williams

ก็จะส่งกลับ "0x0" บนของ Android ด้วยเหตุผลบางอย่าง ...
ทิโมธีวิลเลียมส์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.