簡體   English   中英

如何使用不同的屏幕分辨率

[英]How to Work With Different Screen Resolutions

我正在使用Unity 4.3.3進行游戲。 我正在為Android和iOS設備制作游戲。 由於我對團結很新,我似乎找不到使用不同屏幕分辨率的方法。 我正在使用c#作為我的腳本。

我想讓我的游戲全屏運行。 我已經在iPad 2上進行了測試,它運行得很完美,但對於iPhone 4來說,兩側都是剪裁的,對於iPhone 5,它們的剪裁效果更好。 解決辦法是什么? 我應該在播放器設置> iOS>其他設置>目標分辨率下選擇哪個選項?

unity更改其游戲相機以匹配其使用的屏幕寬高比的尺寸。 顯然這並不總是需要,所以有幾種方法可以解決這個問題:

1)第一種方法很容易實現,盡管很少看起來很好。 您只需更改相機的縱橫比即可與您設計的游戲相匹配。 所以,如果你以4:3設計游戲,你會做這樣的事情:

Camera.aspect = 4f/3f;

請記住,這會在不同的寬高比上扭曲游戲。

2)另一種方法稍微復雜一點,但結果看起來要好得多。 如果您使用的是正交相機,請記住一件重要的事情是,無論使用何種屏幕分辨率,正交相機都會將高度保持在設定值並僅更改寬度。 例如,使用尺寸為10的正交相機,高度將設置為2.考慮到這一點,您需要做的是補償每個級別內最寬的相機(例如,具有更寬的背景)或動態更改相機的正交尺寸,直到其寬度與您創建的相匹配。

只需將GUI位置設置為依賴於所需的屏幕分辨率,GUI組件就更容易實現。 例如,如果您想要一個按鈕出現在右上角,您只需將其位置設置為position = new Vector2(Screen.width - 50, 50);

編輯:既然你提到了你使用的設備,我做了一些查找,找到每個使用的寬高比:Ipad2 = 4:3,Iphone4 = 3:2,Iphone5 = 16:9

既然你說它在Ipad2上看起來很完美,我猜你已經設計了你的游戲使用4:3的寬高比,所以你提到的“剪裁”只是你的正交相機已經擴大了。 解決方案是使用我上面描述的兩種方法之一。

您可以非常輕松地看到它在Unity編輯器中的每個設備上的外觀。 如果你進入游戲選項卡(在統一編輯器中按下播放時彈出的內容),你會看到它有一個設備名稱,以及分辨率和寬高比。 更改此項將讓您了解在不同寬高比下的效果。

您可能希望嘗試使用Camera.ScreenWidth和Camera.ScreenHeight捕獲設備分辨率。

然后做一些數學計算與你的分辨率的差異,並將其應用於父對象。

這將擴大/更小的一切以適應設備分辨率,而不具有針對不同分辨率設備的多個圖像分辨率等。

如果您的目標是獲得之前的寬度:

[RequireComponent(typeof(Camera))]
public class ResizeCamera : MonoBehaviour 
{
    private float   DesignOrthographicSize;
    private float   DesignAspect;
    private float   DesignWidth;

    public  float   DesignAspectHeight;
    public  float   DesignAspectWidth;

    public void Awake()
    {
        this.DesignOrthographicSize = this.camera.orthographicSize;
        this.DesignAspect = this.DesignAspectHeight / this.DesignAspectWidth;
        this.DesignWidth = this.DesignOrthographicSize * this.DesignAspect;

        this.Resize();
    }

    public void Resize()
    {       
        float wantedSize = this.DesignWidth / this.camera.aspect;
        this.camera.orthographicSize = Mathf.Max(wantedSize, 
            this.DesignOrthographicSize);
    }
}

您需要根據設備的縱橫比更改攝像機視口。 假設您制作了720x1080的游戲

然后在腳本中你應該做

float xFactor = Screen.width / 720f;
float yFactor = Screen.height  / 1080f;

Camera.main.rect = new Rect(0,0,1,xFactor/yFactor);

要么

另一種方式是,如果你正在制作9:16寬高比的游戲

在腳本中執行此操作,

public float targetRatio = 9f/16f; //The aspect ratio of your game
void Start()
{
    Camera cam = GetComponent<Camera>();
    cam.aspect = targetRatio;
}

我解決這個問題最簡單的方法就像史蒂文所指出的那樣,迫使我的透視相機長寬比與我開發的相比。 當然,如果我開發的縱橫比與設備不同,這會使某些對象變形。 對於UI對象,如果您使用內置,我會根據屏幕大小的百分比創建矩形

Rect(0.5 * Screen.width, 0.5 * Screen.height, 0.25 * Screen.width, 0.25 * Screen.height) 

這將左上角置於屏幕的中心,並創建一個高度為1/4且屏幕寬度為1/4的矩形。 我正在使用NGUI 2.7進行用戶界面,到目前為止我還沒有看到任何不同寬高比的問題,並且使用正交相機來渲染UI

我知道這是一個老話題,但人們可能仍然最終尋找答案。

要將透視攝像機調整為具有與Unity默認值不同的行為的不同屏幕寬高比,您需要一些三角函數。 所有必要的信息都在這里: https//en.wikipedia.org/wiki/Angle_of_view

如果你想要一個簡單的出路,這里有一個適用於所有相機類型的解決方案: http//u3d.as/oUX

好的,這是一個很大的問題。 許多人提到強制縱橫比,這是一個很好的解決方案。 然而,對於許多游戲來說這是不合適的。 對於許多游戲設計,您希望游戲感覺它是運行的設備/屏幕的原生,並且您希望使用每平方英寸的屏幕空間。 要做到這一點,您必須為游戲中的每個系統構建和測試不同大小和形狀的屏幕。 對於為多個設備構建應用程序和網站,這是一個非常類似的問題。

屏幕尺寸

可以使用DPI以及使用以下語句的解析以編程方式檢索屏幕大小:

Resolution res = Screen.currentResolution;
float screenSquareInches = res.width * res.height / Screen.dpi;

對於通過相機查看的屏幕上的內容,只有一個變量需要縮放,這就是相機的大小(或游戲世界中將被擠到屏幕上的多少東西)。 您可以使用3D游戲的視野或2D游戲的正交尺寸來控制相機的尺寸 只有測試才會說明哪種方程支持最廣泛的屏幕尺寸,但這些方面的內容可以很好地發揮作用:

// this should be a tweakable number, so you can fine tune it to your needs. It represents the screen size at which the camera size should not be scaled at all
float expectedScreenArea = 20;
// this number should also be tweakable, which declares how much smaller/larger text can get depending on the screen size. Generally larger screens are viewed from farther away, so scaling should be slight
float cameraScalingRate = 0.25f;
// multiply this number by the default/base camera size you have picked, whether that's field of view or orthographic size
float cameraSizeMultiplier = 1 + (screenSquareInches / expectedScreenArea - 1) * cameraScalingRate;

好吧,這應該可以讓你在擴展游戲世界方面獲得最大的成功,但是UI元素,文本,HUD和屏幕控制等方面呢? 好吧,對於像文本這樣的元素,上面的等式應該可以很好地工作,盡管你可能想要一個不同的縮放率值。 對於屏幕控制,您可能需要更完整的轉換,例如操縱桿移動到平板電腦屏幕的底角而不是側面居中,或者如果它不是觸摸屏設備,則完全刪除屏幕控制。 這超出了這個問題的范圍。

屏幕寬高比

屏幕的寬高比(寬度與高度相比)也很重要,需要自己處理。 通常,最好的方法是凍結屏幕的垂直高度,以便隨着屏幕變寬,屏幕上的元素不會縮放,但隨着屏幕變高,屏幕上的元素按比例縮放到多高屏幕增長。 這已經是相機的默認行為,但對於UI元素,您必須將其設置為相同。 如果您使用帶有canvas的新UI系統,這相對容易。 在CanvasScalar組件上,有一個屬性可以控制元素的縮放方式,具體取決於寬高比。 將其更改為匹配寬度或高度,並使其與高度匹配。

進一步考慮

通過支持不同的屏幕尺寸和形狀,需要考慮的不僅僅是讓一切都合適。 你還需要確保你的游戲在不同的屏幕上運行良好。 這包括微妙的事情,如不使玩家在小屏幕上感到幽閉恐懼症,以確保敵人無法向玩家射擊,如果他們在屏幕外,以確保更新屏幕上保持元素的邊界。 如果這是PC游戲,另一件需要考慮的事情是,有人可能會將計算機插入不同的屏幕或動態更改分辨率。 考慮到這一點,可以根據需要重新運行上述方程式,這樣玩家就不必退出游戲以便再次排隊。

如果您正在開發2D游戲,那就是您的相機處於正交視圖中,那么只需執行以下代碼並將其附加到您的游戲對象即可。 它將使用屏幕分辨率縮放游戲對象(在本例中為精靈)。

void Resize()
{
    SpriteRenderer sr=GetComponent<SpriteRenderer>();
    if(sr==null) return;

    transform.localScale=new Vector3(1,1,1);

    float width=sr.sprite.bounds.size.x;
    float height=sr.sprite.bounds.size.y;


    float worldScreenHeight=Camera.main.orthographicSize*2f;
    float worldScreenWidth=worldScreenHeight/Screen.height*Screen.width;

    Vector3 xWidth = transform.localScale;
    xWidth.x=worldScreenWidth / width;
    transform.localScale=xWidth;

    Vector3 yHeight = transform.localScale;
    yHeight.y=worldScreenHeight / height;
    transform.localScale=yHeight;

}

資產商店有關於此問題的免費資產......只需查看...

http://u3d.as/content/palash-bhowmick/fit-all-screen-size/9q9

如果更改了對象的形狀,則刪除以以下內容開頭的行: -

transform.localScale.x =

Unity Unity非常容易,因為Unity3D擁有自己的UI系統。 對於3D Unity使用屏幕尺寸自動調整相機。 實際上UI出現問題,而且有點棘手。 首先嘗試確定哪些元素需要根據屏幕大小更改位置和大小。 例如,如果您的按鈕恰好位於屏幕中央。 然后根據屏幕不需要改變位置。 它將保持在中心位置。

現在讓我們看一下你在屏幕一角有一個按鈕的場景,就像我們在右上角或左上角看到暫停按鈕一樣。 現在,您必須相應地將按鈕固定在角落中。 游戲運行的屏幕大小無關緊要,暫停按鈕應該堅持到角落。

現在讓我們再舉一個你菜單中有背景的案例。 現在你將不得不為這個BG精靈應用拉伸。 此BG將相應地拉伸和收縮,但其上的所有項目都將具有固定大小。 為此,建議將BG平放,以便相同的BG可以在16:10或4:3時具有良好的質量(全部關於Unity Native UI)

如果您別無選擇您還可以做更多的工作並為您的相機添加一個特殊的腳本:

  1. 檢查設備的屏幕分辨率
  2. 為此設置目標分辨率
  3. 並設定目標縱橫比(重要)

你需要做的只是編寫一個基本功能來檢查屏幕分辨率(你想要的設備的寬度和高度),然后添加一些功能來設置正確的屏幕分辨率和寬高比!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM