14. UGUI屏幕适配
1.基础适配 2.异形屏适配 1.基础适配 public class SmartCanvasAdapter : MonoBehaviour { [ SerializeField ] private CanvasScaler canvasScaler; [ SerializeField ] private Vector2 designResolution= new Vector2 ( 1080 , 2340 ) ; private float lastScreenWidth; private float lastScreenHeight; void Start ( ) { if ( canvasScaler== null ) canvasScaler= GetComponent < CanvasScaler> ( ) ; AdaptCanvas ( ) ; } void Update ( ) { // 检测屏幕尺寸变化(比如折叠屏展开) if ( Screen. width!= lastScreenWidth|| Screen. height!= lastScreenHeight) { AdaptCanvas ( ) ; lastScreenWidth= Screen. width; lastScreenHeight= Screen. height; } } void AdaptCanvas ( ) { float designAspect= designResolution. x/ designResolution. y; float screenAspect= ( float ) Screen. width/ Screen. height; // 使用平滑过渡 float minAspect= designAspect* 0.7f ; float maxAspect= designAspect* 1.5f ; float clampedAspect= Mathf. Clamp ( screenAspect, minAspect, maxAspect) ; float t= Mathf. InverseLerp ( minAspect, maxAspect, clampedAspect) ; // 使用插值避免突变 float targetMatch= Mathf. Lerp ( 1f , 0f , t) ; canvasScaler. matchWidthOrHeight= targetMatch; // 可选:触发布局重建(如果需要) StartCoroutine ( RebuildLayoutNextFrame ( ) ) ; } IEnumerator RebuildLayoutNextFrame ( ) { yield return null ; // 等待一帧,让CanvasScaler先更新 LayoutRebuilder. ForceRebuildLayoutImmediate ( canvasScaler. GetComponent < RectTransform> ( ) ) ; } } 2.异形屏适配
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1003892.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!