unity NGUI PC屏幕自适应(定高移动布局方案)

    xiaoxiao2021-11-29  26

    步骤:

    1.设置NGUI的UIRoot适配方案,这样保证任何分辨率下高度能保证全部呈现。(高度设置为基准高度,即做UI得时候的高度)

    2.贴上脚本,把需要移动和缩放的object拖入Inspector,选择移动或缩放方案。代码如下:

    using UnityEngine; using System.Collections; using System.Collections.Generic; /// <summary> /// 自适应类型 /// </summary> public enum SelfAdaptionType {     LeftPanel,     UpPanel,     DownPanel,     RightPanel } public class SelfAdaption_PC : MonoBehaviour {     public SelfAdaptionType adaptionType; //自适应类型     float screenWid;     float screenHei;     private float baseWidth=2000f;  //基准宽     private float baseHeight = 1125f;  //基准高     private float baseScreenWidth = 1296f;   //基准的屏幕宽(screen.width的输出值)     float deltaWid;  //移动偏移量     float deltaScale;  //缩放比例     public List<GameObject> objsMove = new List<GameObject>();   //需要移动的物体     public List<GameObject> objsScale = new List<GameObject>();  //需要缩放的物体     void Awake()     {         screenWid= Screen.width;         screenHei = Screen.height;         deltaWid = (baseWidth - screenWid* baseHeight / screenHei)/2;         deltaScale = screenWid / baseScreenWidth;         SelfAdaption_PC_();     }     private void SelfAdaption_PC_()     {         if(adaptionType.Equals(SelfAdaptionType.LeftPanel))         {             MoveObjs(1);         }         else if(adaptionType.Equals(SelfAdaptionType.RightPanel))         {             MoveObjs(-1);         }         else if(adaptionType.Equals(SelfAdaptionType.UpPanel))         {             ScaleObjs();         }         else if(adaptionType.Equals(SelfAdaptionType.DownPanel))         {             ScaleObjs();         }     }     private bool MoveObjs(int _flag)     {         if (objsMove != null && objsMove.Count > 0)         {             foreach (var it in objsMove)             {                 it.transform.localPosition +=(_flag)* new Vector3(deltaWid, 0, 0);             }             return true;         }         return false;     }     private bool ScaleObjs()     {         if(objsScale!=null&&objsScale.Count>0)         {             foreach(var it in objsScale)             {                 Vector3 t_scale = it.transform.localScale;                                  it.transform.localScale = new Vector3(t_scale.x*deltaScale,t_scale.y,t_scale.z);             }             return true;         }         return false;     } }

    PS:

    1.Game里设置的基准分辨率,与screen.width和screen.height不符,导致缩放的参考值需要获取和自己设置。

    2.本示例缩放不适用于不居中的的物体(此方案旨在移动布局)。

    示例:

    转载请注明原文地址: https://ju.6miu.com/read-678824.html

    最新回复(0)