Unity 게임을 Android로 포팅 할 때의 해상도 문제


9

그래서 Unity3D에서 처음으로 게임을 Android로 이식하고 있습니다. 그리고 그 과정에서 몇 가지 문제가 발생했습니다. 내 현재 문제는 해상도가 옳지 않은 것 같습니다. 화면 가장자리를 잘라 내고 화면을 왼쪽 / 오른쪽으로 스크롤하는 스크롤 중지가 더 이상 올바른 위치에 있지 않습니다.

약간의 연구를 한 후에 많은 사람들이 모든 Android / Iphone / Ipad에서 실행할 수 있도록 게임 해상도를 독립적으로 만들어야한다고 말합니다. 이것이 사실입니까? 그렇다면 어떻게해야합니까? 그렇지 않은 경우 해상도를 수정하여 모바일 장치로 이식 할 때 올바르게 표시되도록하려면 어떻게해야합니까?

편집 : 나는 여전히 필요한 것을 가지고 있지 않으며, 아래 나열된 코드와 트릭으로도 여전히 해상도가 제대로 작동하지 않습니다. 장치에 따라 해상도를 조정하는 방법이 필요합니다. 어떤 이유로 Mungoid의 코드를 사용하여 장치의 해상도를 검색하려고하면 0x0이 반환됩니다.


1
특정 화면 해상도를 가정하고 현재 화면 해상도를 가져 와서 무언가를 수행 할 수 있도록 코드를 변경해야합니다. 현재하고있는 일과 방법에 따라 모든 솔루션에 맞는 솔루션은 없습니다.
Tetrad

구체적으로,이 질문은 (사이트에 이것에 대해 많은 질문이 있습니다) gamedev.stackexchange.com/questions/51/…
Tetrad

Ahh, 기본적으로 Namar의 말 : "비율로 모든 것을 배치해야합니다. 예를 들어, 건강 막대는 화면 너비의 80 %에 가로 스케일의 화면 너비의 10 %가 배치됩니다"참조를 수정하는 방법 우주의 특정 지역? 내 화면 스크롤은 월드 공간의 특정 영역을 기반으로하지만 해상도 변경으로 혼란스러워 보입니다.
Timothy Williams

문제에 대해 더 구체적으로 말씀해 주시겠습니까? 해상도가 "정확하지 않은 것 같다"고 말하지만 "정지"상태입니다. 그러나 화면 해상도는 일반적으로 장치의 고정 된 속성입니다. 따라서 잘못된 해상도가 아니라 화면에 렌더링하는 방식입니다. 화면의 너비와 높이를 가정하면 항상 다른 장치와 종횡비에 문제가 있습니다.
Kylotan

실제로 내가하려고하는 일은 가장 낮은 해상도를 찾고 게임을 설정하고 그에 따라 모든 객체의 크기를 조정하는 코드를 작성하는 것입니다. 운동장의 규모를 설정하는 방법을 알고 있지만 장치의 해상도를 얻을 수없는 것 같습니다. 따라서 게임이 "너무 확대"되었거나 모든 것이 너무 큽니다.
디모데 윌리엄스

답변:


7

Android에서 발생하는 문제는 모든 기기마다 자체 화면 크기, 해상도 및 픽셀 밀도가 있다는 것입니다. 모든 장치에서 게임이 동일하게 보이도록하려면 많은 작업이 필요하며 결과에 결코 만족하지 않을 것입니다. 게임은 와이드 스크린 디스플레이에서 확장되거나 비 와이드 스크린에서 압축되어 나타납니다. 나는 당신이 정말로 중요한 것을 결정하고 다른 것을 조금 밀어 보도록 제안합니다.

게임의 모습과 모양에 대한 스크린 샷이나 지식이 없으면 솔루션을 모두 추측 할 수 있지만 특정 조언을 제공 할 구체적인 지침은 없습니다.

Unity에서는 Screen 클래스 : Screen.widthScreen.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 */
}

화면 너비와 높이를 기준으로 카메라의 종횡비를 설정해도 도움이되지 않습니다. 전화기가 수직 일 때는 전혀 표시되지 않으며 수 평일 때는 이전과 정확히 동일하게 표시됩니다. 이 게임은 세 부분으로 나뉘어져 있으며 손가락으로 섹션 사이를 부드럽게 스크롤합니다 (Like in Angry Birds). 여기 왼쪽의 모습이 나와 있습니다. 그리고 중간 . 내 전화를 세로
Timothy Williams

그리고 여기 수평 입니다. 이 사진이 도움이 되길 바랍니다. Unity에서 Android로 포팅하거나 Android 게임을 제작 한 것은 이번이 처음입니다. 나는 조금 길을 잃었다.
디모데 윌리엄스

당신의 설명과 사진을 (내 해석에 의해) 판단하면 문제는 해결되지 않습니다. 카메라가 원하는 모든 것을 작은 화면에 표시 할 수있는 위치에 있지 않습니다. 레벨을 작게 만들거나 카메라를 뒤로 움직여 더 많은 것을 보여주십시오. 게임 창을 훨씬 작은 크기로 설정하여 현재 가지고있는 1230x530ish 크기 대신 실제 장치 크기를 나타내도록 제안합니다. 따라서 밀어 넣을 때 볼 수있는 느낌을 얻을 수 있습니다.
chaosTechnician 22시 51 분

문제는 이미 카메라를 상당히 크게 축소했다는 것입니다. 이 문제가 지속되면 다양한 화면과 크기를 정확하게 설명하고 수정하려면 어떻게해야합니까?
Timothy Williams

@TimothyWilliams, 게임에서 사용할 수있는 최소 해상도 (800x600 또는 다른 것)를 선택하여 문제를 해결할 수 있습니다. 그리고, 사용 Screen.width.height함께 탠덤 Camera.fieldOfViewCamera.aspect임의의 화면 크기의 동일한 뷰를 재현. 구체적 으로 수행 하는 방법 은 약간의 삼각법 이 필요합니다.
chaosTechnician 16:15에

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


이것은 도움이되지 않았습니다. 해상도는 여전히 꺼져 있습니다.
디모데 윌리엄스

어떤 이유로 안드로이드에서 "0x0"을 반환합니다.
Timothy Williams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.