当前位置: 首页 > wzjs >正文

宁波seo整站优化软件小程序开发公司价格表

宁波seo整站优化软件,小程序开发公司价格表,怎么查名字有没有被注册商标,wordpress无法创建目录安装失败接上篇 Unity屏幕适配——立项时设置_unity 竖屏-CSDN博客文章浏览阅读1.3k次,点赞25次,收藏6次。其中:1334 是设计高2 是Camera(相机)的Size属性用于定义相机视图的垂直大小。这个值实际上是相机视图的一半高度。100…

接上篇

Unity屏幕适配——立项时设置_unity 竖屏-CSDN博客文章浏览阅读1.3k次,点赞25次,收藏6次。其中:1334 是设计高2 是Camera(相机)的Size属性用于定义相机视图的垂直大小。这个值实际上是相机视图的一半高度。100 UI坐标系相对世界坐标系的缩放倍数。_unity 竖屏 https://blog.csdn.net/NRatel/article/details/146253789意图:根据实际项目,传入屏幕基本信息的获取方法,然后得到以下信息:

Canvas大小
实际屏幕分辨率
实际屏幕宽高比
安全区域(屏幕空间)
安全区域宽高比
设计分辨率
设计宽高比
实际屏幕宽高比类型
安全区域宽高比类型
FitIn模式,Screen相对Design的缩放值
EnvelopeParent模式,Screen相对Design的缩放值
FitIn模式,Canvas相对Design的缩放值
EnvelopeParent模式,Canvas相对Design的缩放值
实际屏幕相对于设计的缩放值(与fitInScale相同)

屏幕空间下,四边安全区域距屏幕边缘的大小
UI空间下,四边安全区域距屏幕边缘的大小
UI空间下的安全区域

----------------------------------- NRatel 割 -----------------------------------

初始化时,需注入的屏幕基本信息的获取接口

using UnityEngine;namespace NRFramework
{public interface IScreenInfoGetter{public Vector2 GetScreenSize();     //每帧检查,注意实现的性能public Rect GetSafeArea();public Vector2 GetCanvasSize();public Vector2 GetDesignSize();}
}

提供一个默认的获取方法

using UnityEngine;namespace NRFramework
{public class ScreenInfoGetter_Default : IScreenInfoGetter{public Vector2 GetScreenSize(){return new Vector2(Screen.width, Screen.height);}public Rect GetSafeArea(){return Screen.safeArea;}public Vector2 GetCanvasSize(){Canvas uiCanvas = UIManager.GetInstance().uiCanvas;RectTransform uiCanvasRT = (RectTransform)uiCanvas.transform;return new Vector2(uiCanvasRT.rect.width, uiCanvasRT.rect.height);}public Vector2 GetDesignSize(){return UIManager.GetInstance().canvasScaler.referenceResolution;}}
}

计算类

using System;
using UnityEngine;namespace NRFramework
{public enum AspectType{Wide,Tall,Standard,}//注意:// Rect 的坐标系(以屏幕左上为原点,向右为x正方向,向下为y正方向)// https://docs.unity3d.com/cn/2021.3/ScriptReference/Rect.html// 但 Rect safeArea 以屏幕左下为原点,向右为x正方向,向上为y正方向public class ScreenAdapter{static public bool inited { private set; get; }static public Vector2 canvasSize { private set; get; }                  //Canvas大小static public Vector2 screenSize { private set; get; }                  //实际屏幕分辨率static public float screenAspect { private set; get; }                  //实际屏幕宽高比static public Rect safeArea { private set; get; }                       //安全区域(屏幕空间)static public float safeAreaAspect { private set; get; }                //安全区域宽高比static public Vector2 designSize { private set; get; }                  //设计分辨率static public float designAspect { private set; get; }                  //设计宽高比static public AspectType screenAspectType { private set; get; }         //实际屏幕宽高比类型static public AspectType safeAreaAspectType { private set; get; }       //安全区域宽高比类型static public float screenFitInScale { private set; get; }              //FitIn模式,Screen相对Design的缩放值static public float screenEnvelopeScale { private set; get; }           //EnvelopeParent模式,Screen相对Design的缩放值static public float canvasFitInScale { private set; get; }              //FitIn模式,Canvas相对Design的缩放值static public float canvasEnvelopeScale { private set; get; }           //EnvelopeParent模式,Canvas相对Design的缩放值static public float screenScale { get { return screenFitInScale; } }    //实际屏幕相对于设计的缩放值(与fitInScale相同)static private IScreenInfoGetter sm_ScreenInfoGetter;static private Vector2 sm_LastScreenSize;static public event Action onScreenSizeChanged;                         //屏幕大小变化事件static public void Init(IScreenInfoGetter screenInfoGetter = null){sm_ScreenInfoGetter = screenInfoGetter ?? new ScreenInfoGetter_Default();canvasSize = sm_ScreenInfoGetter.GetCanvasSize();designSize = sm_ScreenInfoGetter.GetDesignSize();screenSize = sm_ScreenInfoGetter.GetScreenSize();safeArea = sm_ScreenInfoGetter.GetSafeArea();screenAspect = screenSize.x / screenSize.y;safeAreaAspect = safeArea.width / safeArea.height;designAspect = designSize.x / designSize.y;if (screenAspect > designAspect){// 宽类型(实际宽高比更大)screenAspectType = AspectType.Wide;// 宽类型时FitIn缩放比:Y方向正好填满,X方向不足(即Y方向方向缩放比)screenFitInScale = screenSize.x / designSize.y;canvasFitInScale = canvasSize.y / designSize.y;// 宽类型时Envelope缩放比:X方向正好填满,Y方向超出(即X方向方向缩放比)screenEnvelopeScale = screenSize.x / designSize.x;canvasEnvelopeScale = canvasSize.x / designSize.x;}else if (screenAspect < designAspect){// 长类型(实际宽高比更小)screenAspectType = AspectType.Tall;// 长类型时FitIn缩放比:X方向正好填满,Y方向不足(即X方向方向缩放比)screenFitInScale = screenSize.x / designSize.x;canvasFitInScale = canvasSize.x / designSize.x;// 长类型时Envelope缩放比:Y方向正好填满,X方向超出(即Y方向方向缩放比)screenEnvelopeScale = screenSize.y / designSize.y;canvasEnvelopeScale = canvasSize.y / designSize.y;}else{//标准类型(同宽高比)screenAspectType = AspectType.Standard;screenFitInScale = 1;canvasFitInScale = 1;screenEnvelopeScale = 1;canvasEnvelopeScale = 1;}if (safeAreaAspect > designAspect){// 宽类型(实际宽高比更大)safeAreaAspectType = AspectType.Wide;}else if (safeAreaAspect < designAspect){// 长类型(实际宽高比更小)safeAreaAspectType = AspectType.Tall;}else{//标准类型(同宽高比)safeAreaAspectType = AspectType.Standard;}inited = true;sm_LastScreenSize = screenSize;//Debug.Log($"screenSize: {screenSize}");//Debug.Log($"safeArea: {safeArea}");//Debug.Log($"screenType: {screenAspectType}");//Debug.Log($"safeAspectType: {safeAreaAspectType}");}//按需,可在Imit后,由外部Update驱动检查static public void CheckScreenSizeChange(){Vector2 newScreenSize = sm_ScreenInfoGetter.GetScreenSize();if (newScreenSize.x == sm_LastScreenSize.x && newScreenSize.y == sm_LastScreenSize.y) { return; }sm_LastScreenSize = newScreenSize;Canvas.ForceUpdateCanvases();   //强刷CanvasInit();                         //重新初始化onScreenSizeChanged?.Invoke();  //回调变化}//屏幕空间下,四边安全区域距屏幕边缘的大小static public void GetSafeEdgeSize_InScreen(out float notchOffset, out float homeIndicatorOffset, out float side1Offset, out float side2Offset){notchOffset = screenSize.y - safeArea.yMax;homeIndicatorOffset = safeArea.y;side1Offset = safeArea.x;side2Offset = screenSize.x - safeArea.xMax;}//UI空间下,四边安全区域距屏幕边缘的大小static public void GetSafeEdgeSize_InUI(out float notchOffset, out float homeIndicatorOffset, out float side1Offset, out float side2Offset){GetSafeEdgeSize_InScreen(out float notchOffset_InScreen, out float homeIndicatorOffset_InScreen, out float side1Offset_InScreen, out float side2Offset_InScreen);notchOffset = notchOffset_InScreen / screenScale;homeIndicatorOffset = homeIndicatorOffset_InScreen / screenScale;side1Offset = side1Offset_InScreen / screenScale;side2Offset = side2Offset_InScreen / screenScale;}//UI空间下的安全区域static public Rect GetSafeArea_InUI(){GetSafeEdgeSize_InUI(out float notchOffset_InDesign, out float homeIndicatorOffset_InDesign, out float side1Offset_InDesign, out float side2Offset_InDesign);return new Rect(){x = (side1Offset_InDesign - side2Offset_InDesign) / 2,                                      //(左边-右边)/2y = (homeIndicatorOffset_InDesign - notchOffset_InDesign) / 2,                              //(下边-上边)/2width = designSize.x - (side1Offset_InDesign + side2Offset_InDesign),                 //设计宽-(左边+右边)height = designSize.y - (homeIndicatorOffset_InDesign + notchOffset_InDesign),        //设计高-(下边+上边)};}}
}

注意:

1、维护了一个 onScreenSizeChanged,供编辑器下/折叠屏分辨率切换时使用

2、屏幕分辨率切换时,需执行一次 Canvas.ForceUpdateCanvases(); 

3、从屏幕空间到UI空间转换大小时,核心为 / screenScale。(见 GetSafeEdgeSize_InUI 中的实现)。

----------------------------------- NRatel 割 -----------------------------------

经过适配信息计算后,安全区域的适配只需挂一个脚本(目前仅处理了竖屏项目)

此脚本将在运行时,将此节点的大小设到与安全区域相同。

需要显示到安全区域的物体,可以放到此节点下去(如下图的设置按钮,锚点为左上)。

iphoneX 下的效果


文章转载自:

http://O5bHArOb.rmdwp.cn
http://e1s7g0co.rmdwp.cn
http://NgzuXTi0.rmdwp.cn
http://8U3B0OyY.rmdwp.cn
http://g34QboVK.rmdwp.cn
http://Ga1RIbZ9.rmdwp.cn
http://BsgnIGqT.rmdwp.cn
http://pabsijmF.rmdwp.cn
http://JAnn1eLA.rmdwp.cn
http://ZO4Ik8Nb.rmdwp.cn
http://GcyagXML.rmdwp.cn
http://W9kH0eqL.rmdwp.cn
http://jETPmHCB.rmdwp.cn
http://DI0iFzYm.rmdwp.cn
http://84bN3HaP.rmdwp.cn
http://BoWLH38t.rmdwp.cn
http://1mKGu796.rmdwp.cn
http://cCTKZqIF.rmdwp.cn
http://WzP7WE0E.rmdwp.cn
http://pNfbYB0K.rmdwp.cn
http://zVL4BD3Y.rmdwp.cn
http://tIfb6T1V.rmdwp.cn
http://JNr6PEXm.rmdwp.cn
http://RoTRSzTg.rmdwp.cn
http://kp0A30Qo.rmdwp.cn
http://Ik9PdWhT.rmdwp.cn
http://n0jzB78a.rmdwp.cn
http://9yy8mO4N.rmdwp.cn
http://0ZMNJAGL.rmdwp.cn
http://srZTnDFY.rmdwp.cn
http://www.dtcms.com/wzjs/755066.html

相关文章:

  • 校园网站建设总体设计网站服务器可以更换吗
  • 武进区建设局网站宁波专业的网站搭建公司
  • 漯河高端网站建设推荐网站建设服务
  • 做家常菜的网站哪个好青岛开发网站
  • 常州建设银行网站林州做网站
  • 潍坊网站制作保定公司电话谷歌seo怎么做
  • 做微信公众号的网站wordpress 中文在线留言
  • 酷站 网站模板免费营销网站制作
  • 网站单个页面外链网
  • 网站开发人员配置给网站做游戏视频怎么赚钱
  • 超酷个人网站欣赏微信网站建设报价单
  • 网站建设单子百度推广 帮做网站吗
  • pc优化工具搜索引擎优化答案
  • 用mvc做网站的框架织梦做的网站页面打不开
  • 公司用员工信息做网站域名备案网站开发与服务合同
  • 网上做兼职做网站老年公寓网站模板
  • 做优秀网站简历模板免费下载电子版
  • 福田建设大型网站建设公司好吗一个网站可以做几级链接
  • 北京免费网站设计wordpress代码编辑器
  • 海口网站提升排名idea网站开发教程
  • 苏州前几天网站建设自己做的网站怎么发布到网上
  • 试百客 专业做试用的网站母婴网站模板dede
  • 手机平台网站系统wordpress自定义二级菜单
  • 做301重定向会影响网站权重吗周口网站建设
  • 域名还没备案可以做网站吗可以自建网站吗
  • 网站关键字分析平面设计培训多少钱 贵吗
  • 昆山做网站企业传统网站开发实例
  • 手机网站网页开发教程青岛企业网站开发
  • 58同城网站建设的不足图书网站建设实训总结
  • 小程序定制开发流程深圳网站seo地址