NGUI的自适应分辨率怎么写
1个回答
推荐于2016-12-01
展开全部
NGUI屏幕适应
根据NGUI所给出的例子就可以做到:
首先每个部都由一个Anchor来控制,比如我所做的项目,就需要把上下两个控制面板对齐上下,然后中间的UI就居中显示,就可以达到目的了。
所以我的做法是:分三个Anchor控制。
分别上中下对齐:
注意,把Camera绑定后,再针对当面的屏幕把上中下三个UI对齐,运行就会自动 对齐的了。
当然 ,除了 这个之外,还需要借用一个SZUIRoot脚本控制屏幕自适应 。
把UIRoot的Scaling Style设置为:FixeSize ,它的Manual Hight为开发时的屏幕高度。
然后为当前开发屏幕大小。
SZUIRootScale 代码示例如下:
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(UIRoot))]
public class SZUIRootScale : MonoBehaviour
{
public int aspectRatioHeight;
public int aspectRatioWidth;
public bool runOnlyOnce = false;
private UIRoot mRoot;
private bool mStarted = false;
void Awake()
{
UICamera.onScreenResize += ScreenSizeChanged;
}
void OnDestroy()
{
UICamera.onScreenResize -= ScreenSizeChanged;
}
void Start()
{
mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);
mRoot.scalingStyle = UIRoot.Scaling.FixedSize;
this.Update();
mStarted = true;
}
void ScreenSizeChanged()
{
if (mStarted && runOnlyOnce)
{
this.Update();
}
}
void Update()
{
float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;
float currentAspectRatio = Screen.width * 1f / Screen.height;
if (defaultAspectRatio > currentAspectRatio)
{
int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);
mRoot.manualHeight = horizontalManualHeight;
}
else
{
mRoot.manualHeight = aspectRatioHeight;
}
if (runOnlyOnce && Application.isPlaying)
{
this.enabled = false;
}
}
}
根据NGUI所给出的例子就可以做到:
首先每个部都由一个Anchor来控制,比如我所做的项目,就需要把上下两个控制面板对齐上下,然后中间的UI就居中显示,就可以达到目的了。
所以我的做法是:分三个Anchor控制。
分别上中下对齐:
注意,把Camera绑定后,再针对当面的屏幕把上中下三个UI对齐,运行就会自动 对齐的了。
当然 ,除了 这个之外,还需要借用一个SZUIRoot脚本控制屏幕自适应 。
把UIRoot的Scaling Style设置为:FixeSize ,它的Manual Hight为开发时的屏幕高度。
然后为当前开发屏幕大小。
SZUIRootScale 代码示例如下:
using UnityEngine;
[ExecuteInEditMode]
[RequireComponent(typeof(UIRoot))]
public class SZUIRootScale : MonoBehaviour
{
public int aspectRatioHeight;
public int aspectRatioWidth;
public bool runOnlyOnce = false;
private UIRoot mRoot;
private bool mStarted = false;
void Awake()
{
UICamera.onScreenResize += ScreenSizeChanged;
}
void OnDestroy()
{
UICamera.onScreenResize -= ScreenSizeChanged;
}
void Start()
{
mRoot = NGUITools.FindInParents<UIRoot>(this.gameObject);
mRoot.scalingStyle = UIRoot.Scaling.FixedSize;
this.Update();
mStarted = true;
}
void ScreenSizeChanged()
{
if (mStarted && runOnlyOnce)
{
this.Update();
}
}
void Update()
{
float defaultAspectRatio = aspectRatioWidth * 1f / aspectRatioHeight;
float currentAspectRatio = Screen.width * 1f / Screen.height;
if (defaultAspectRatio > currentAspectRatio)
{
int horizontalManualHeight = Mathf.FloorToInt(aspectRatioWidth / currentAspectRatio);
mRoot.manualHeight = horizontalManualHeight;
}
else
{
mRoot.manualHeight = aspectRatioHeight;
}
if (runOnlyOnce && Application.isPlaying)
{
this.enabled = false;
}
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询