【问题标题】:How can I code my game to work on every resolution of Android devices? (with Unity)如何编写我的游戏以在各种分辨率的 Android 设备上运行? (与统一)
【发布时间】:2013-07-25 15:41:28
【问题描述】:

我有一个在 Unity 中以 480x320 分辨率制作的游戏(我已在构建设置中设置)。但我想为每台具有各种分辨率的 Android 设备发布我的游戏。我该怎么做才能告诉 Unity 将我的游戏扩展到设备的分辨率?有可能吗?

提前致谢!

【问题讨论】:

    标签: android unity3d screen-resolution


    【解决方案1】:

    您的问题的答案很大程度上取决于您是如何实现游戏的。如果您使用 GUI 纹理创建它,那么它很大程度上取决于您放置/调整对象的方式与屏幕大小的关系,这会让事情变得有些棘手。

    如果您的大部分游戏都是使用对象(例如平面、立方体等)完成的,那么我通常会选择使用两种方法。

    1) 第一种方法很容易实现,但看起来并不总是很好。您可以简单地更改相机的纵横比以匹配您设计游戏的那个。所以在你的情况下,既然你设计了 4:3 的游戏,你会做这样的事情:

    Camera.aspect = 4f/3f;
    

    但是,如果有人在 16:9 的屏幕上玩游戏,游戏最终会显得扭曲和拉伸。

    2) 第二种方法不那么简单,需要大量的工作和计算,但会为您提供更清晰的结果。如果您使用的是正交相机,要记住的重要一点是,无论使用什么屏幕分辨率,正交相机都会将高度保持在设定的高度,并且只会改变宽度。例如,对于大小为 10 的正交相机,高度将设置为 2。考虑到这一点,您需要做的是补偿每个级别中可能的最宽相机(例如,具有较宽的背景) 或动态更改相机的正交尺寸,直到其宽度与您创建的相匹配。

    如果您使用立体摄像头完成 3d 游戏,屏幕分辨率应该不会真正影响它的外观,但我想这取决于游戏,因此需要更多信息

    【讨论】:

    • 我使用对象(立方体、球体)制作游戏。本游戏是 Unity 3D 世界制作的 2D 游戏。
    • 如果是 2D,那么您必须使用正交相机,所以请按照我给出的提示进行操作。
    【解决方案2】:

    我的做法是根据设备纵横比更改相机视口 假设你制作了 800x1280 的游戏

    你可以在任何一个脚本中做到这一点

    float xFactor = Screen.width / 800f;
    float yFactor = Screen.height  / 1280f;
    
    
    Camera.main.rect=new Rect(0,0,1,xFactor/yFactor);
    

    这就像魔术一样工作

    【讨论】:

    • 伙计们,这有点麻烦,我不推荐使用@Nelson Austria 的答案,
    【解决方案3】:

    一个简单的方法是考虑你的目标,我的意思是如果你正在为 Iphone 5 做游戏,那么纵横比是 9:16 v 或 16:9 h。

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

    【讨论】:

      【解决方案4】:

      这是我在 2D 游戏中缩放正交摄影机的脚本

      public float screenHeight = 1920f;
      public float screenWidth = 1080f;
      public float targetAspect = 9f / 16f;
      public float orthographicSize;
      private Camera mainCamera;
      
      // Use this for initialization
      void Start () {
      
          // Initialize variables
          mainCamera = Camera.main;
          orthographicSize = mainCamera.orthographicSize;
      
          // Calculating ortographic width
          float orthoWidth = orthographicSize / screenHeight * screenWidth;
          // Setting aspect ration
          orthoWidth = orthoWidth / (targetAspect / mainCamera.aspect);
          // Setting Size
          Camera.main.orthographicSize = (orthoWidth / Screen.width * Screen.height);
      }
      

      【讨论】:

        【解决方案5】:

        我假设它是 2D 而不是 3D,这就是我 do:

        1. 创建画布对象
        2. 将画布缩放器设置为随屏幕大小缩放
        3. 将参考分辨率设置为例如:480x320
        4. 将屏幕匹配模式设置为与或高度匹配
        5. 如果您当前的屏幕宽度较小,则将匹配设置为 1,如果高度较小,则设置为 0
        6. 在画布内创建一个图像作为背景
        7. 添加 Aspect Ratio Fitter 脚本
        8. 将纵横比模式设置为适合父级(因此 UI 锚点可以位于任何位置)
        9. 将纵横比设置为 480/320 = 1.5

        并在主 Canvas 的 Awake 方法上添加这个 sn-p:

        var canvasScaler = GetComponent<CanvasScaler>();
        var ratio = Screen.height / (float) Screen.width;
        var rr = canvasScaler.referenceResolution;
        canvasScaler.matchWidthOrHeight = (ratio < rr.x / rr.y) ? 1 : 0;
        

        对于 3D 对象,您可以使用上述任何答案

        【讨论】:

          【解决方案6】:

          对我来说最好的解决方案是使用相交线定理,这样就不会出现两边的截断,也不会扭曲游戏视图。这意味着您必须根据不同的纵横比后退或前进。

          如果您愿意,我有an asset on the Unity asset store,它会自动校正相机距离,因此无论您使用哪种手持设备,都不会出现失真或截断。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多