14. UGUI屏幕适配
2026/6/13 8:10:16 网站建设 项目流程

1.基础适配

2.异形屏适配


1.基础适配

publicclassSmartCanvasAdapter:MonoBehaviour{[SerializeField]privateCanvasScalercanvasScaler;[SerializeField]privateVector2designResolution=newVector2(1080,2340);privatefloatlastScreenWidth;privatefloatlastScreenHeight;voidStart(){if(canvasScaler==null)canvasScaler=GetComponent<CanvasScaler>();AdaptCanvas();}voidUpdate(){// 检测屏幕尺寸变化(比如折叠屏展开)if(Screen.width!=lastScreenWidth||Screen.height!=lastScreenHeight){AdaptCanvas();lastScreenWidth=Screen.width;lastScreenHeight=Screen.height;}}voidAdaptCanvas(){floatdesignAspect=designResolution.x/designResolution.y;floatscreenAspect=(float)Screen.width/Screen.height;// 使用平滑过渡floatminAspect=designAspect*0.7f;floatmaxAspect=designAspect*1.5f;floatclampedAspect=Mathf.Clamp(screenAspect,minAspect,maxAspect);floatt=Mathf.InverseLerp(minAspect,maxAspect,clampedAspect);// 使用插值避免突变floattargetMatch=Mathf.Lerp(1f,0f,t);canvasScaler.matchWidthOrHeight=targetMatch;// 可选:触发布局重建(如果需要)StartCoroutine(RebuildLayoutNextFrame());}IEnumeratorRebuildLayoutNextFrame(){yieldreturnnull;// 等待一帧,让CanvasScaler先更新LayoutRebuilder.ForceRebuildLayoutImmediate(canvasScaler.GetComponent<RectTransform>());}}

2.异形屏适配

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询