zoukankan      html  css  js  c++  java
  • Unity 屏幕适配之正交摄像机(Orthographic Camera)下游戏区域适配

    导语:

      我们在进行游戏开发的时候为了让我们游戏在可以在各种机型上正常显示, 需要根据屏幕分辨率来调整游戏区域。

      起初我只是简单的对游戏进行放大缩小和图片填充,但是这种方法在异形屏上虽然可以做到简单的适配,但是游戏内对象位置计算的难度会增加,产生逻辑混乱。

      通过查资料和推理找到了一种更好的方式,就是改变摄像机(camera)的orthographic size,来进行适配。

    1.创建一个Camera(摄像机),将Camera的Projection设置为orthographic

    2.将Size属性设置为9.6(这个根据你的设计需求进行设置,我们的项目一般是在屏幕分辨率为(1080x1920)下进行开发的,size的值是屏幕高度的一半)

    3.创建根据屏幕分辨率改变正交易大小的代码(下面的代码适用于竖屏适配至于横屏适配还需要进一步研究)

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CameraAutoFix : MonoBehaviour
    {
        // 自动旋转允许的方向
        //private allowedOrientationsForAutoRotation = Screen.
        public void Awake()
        {
            ScreenOrientation designAutoRotation = Screen.orientation;
            Camera _camera = this.gameObject.GetComponent<Camera>();
            float aspect = _camera.aspect;
            float designOrthographicSize = 9.6f;
            float designHeight = 1920f;
            float designWidth = 1080f;
            float designAspect = designWidth / designHeight;
            float widthOrthographicSize = designOrthographicSize * designAspect;
            switch (designAutoRotation)
            {
                case ScreenOrientation.Portrait:
                    if(aspect < designAspect)
                    {
                        _camera.orthographicSize = widthOrthographicSize / aspect;
                    }
                    if (aspect > designAspect)
                    {
                        _camera.orthographicSize = designOrthographicSize;
                        //_camera.orthographicSize = designOrthographicSize * (aspect / designAspect);
                    }
                    break;
                case ScreenOrientation.AutoRotation:
                    break;
                case ScreenOrientation.LandscapeLeft:
                    break;
                case ScreenOrientation.LandscapeRight:
                    break;
                case ScreenOrientation.PortraitUpsideDown:
                    break;
                default:
                    break;
    
            }
        }
    }

    4.将上面的脚本文件附加在Camera对象上,就可以适配大部分屏幕了。

      

      

    • 添加到短语集
       
      • 没有此单词集:英语 -> ...
         
      • 创建新的单词集...
    • 拷贝
    • 添加到短语集
       
      • 没有此单词集:英语 -> ...
         
      • 创建新的单词集...
    • 拷贝
    • 添加到短语集
       
      • 没有此单词集:中文(简体) -> ...
         
      • 创建新的单词集...
    • 拷贝
  • 相关阅读:
    linux驱动开发学习一:创建一个字符设备
    如何高效的对有序数组去重
    找到缺失的第一个正整数
    .NET不可变集合已经正式发布
    中国人唯一不认可的成功——就是家庭的和睦,人生的平淡【转】
    自己动手搭建 MongoDB 环境,并建立一个 .NET HelloWorld 程序测试
    ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误
    自己动手搭建 Redis 环境,并建立一个 .NET HelloWorld 程序测试
    ServiceStack 介绍
    一步一步实战扩展 ASP.NET Route,实现小写 URL、个性化 URL
  • 原文地址:https://www.cnblogs.com/sy-liu/p/11957612.html
Copyright © 2011-2022 走看看