Unity NGUI PC屏幕自适应(定高移动布局方案)
发表于2018-01-26
Unity开发中经常会需要使用NUGI插件实现某些功能,本篇文章就是如果利用UGUI插件实现PC屏幕自适应,考虑到有些人还不知道设置的方法,下面就给大家介绍下实现的步骤。
步骤:
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.本示例缩放不适用于不居中的的物体(此方案旨在移动布局)。
示例:
