将显示分辨率限制设置为统一

时间:2017-01-02 07:02:43

标签: android optimization unity3d screen device

所以几个月前我发布了一款游戏。

我在家里添加的设备(Galaxy note 2,galaxy tab pro,wiko)上进行了大量测试,游戏在这些设备上运行顺畅。

但是最后一天,我在LG G3设备上运行我的游戏,并且有很多FPS掉落。

我认为这是因为游戏以屏幕的原始显示分辨率运行(2560 x 1440)。

是否可以创建一个脚本,当它检测到显示分辨率高于FullHD时(比如LG G3),它会以较低的分辨率显示游戏?

我认为这会阻止FPS下降。

2 个答案:

答案 0 :(得分:4)

在每台设备上调整相同的相机分辨率。

如果您的游戏处于纵向模式,则使用720 * 1280分辨率,如果使用横向模式,则使用960 * 640,您的游戏将在每台设备上运行完美。

  1. 将脚本附加到相机
  2. 更改值targetaspect
  3. using UnityEngine;
    using System.Collections;
    
    public class CameraResolution : MonoBehaviour {
    
    void Start () {
        // set the desired aspect ratio (the values in this example are
        // hard-coded for 16:9, but you could make them into public
        // variables instead so you can set them at design time)
        float targetaspect = 720.0f / 1280.0f;
    
        // determine the game window's current aspect ratio
        float windowaspect = (float)Screen.width / (float)Screen.height;
    
        // current viewport height should be scaled by this amount
        float scaleheight = windowaspect / targetaspect;
    
        // obtain camera component so we can modify its viewport
        Camera camera = GetComponent<Camera> ();
    
        // if scaled height is less than current height, add letterbox
        if (scaleheight < 1.0f) {  
            Rect rect = camera.rect;
    
            rect.width = 1.0f;
            rect.height = scaleheight;
            rect.x = 0;
            rect.y = (1.0f - scaleheight) / 2.0f;
    
            camera.rect = rect;
        } else { // add pillarbox
            float scalewidth = 1.0f / scaleheight;
    
            Rect rect = camera.rect;
    
            rect.width = scalewidth;
            rect.height = 1.0f;
            rect.x = (1.0f - scalewidth) / 2.0f;
            rect.y = 0;
    
            camera.rect = rect;
         }
       }
     }
    

答案 1 :(得分:1)

并不那么容易(质量很好)。

基本上,您可以使用资产包系统,并拥有SD和HD格式的双倍图形。 Unity支持它,它称为变体。请在此处找到有关资产包的更多信息: https://unity3d.com/learn/tutorials/topics/scripting/assetbundles-and-assetbundle-manager

检测屏幕分辨率很容易。您可以使用Screen.widthScreen.height

我知道Screen类有一个方法SetResolution,这可能会为你做一件事而不使用Asset Bundle系统。我从来没有自己使用它。 这里有更多关于Screen类: https://docs.unity3d.com/ScriptReference/Screen.html

具体SetResolution方法: https://docs.unity3d.com/ScriptReference/Screen.SetResolution.html

您也可以使用Camera.aspect获取屏幕的宽高比: https://docs.unity3d.com/ScriptReference/Camera-aspect.html