您的位置:首页 > 移动开发 > Unity3D

Unity3D开发之NGUI分辨率适配的UIStretch中Clipping的屏幕缩放问题

2014-02-09 14:44 197 查看
游戏项目必须要与多个分辨率适配,使用NGUI的UIStretch在多个界面都是正常的,但在用下拉列表的遮罩效果的时候,发现出现了显示不正常的问题,然后在网上找了很多种方法都不太解决这个问题,还是自己弄了一天来解决了这个问题。

首先,这个问题的出现是因为Clip需要父类的缩放倍数为(1,1,1),但使用UIStretch适配分辨率会使得这倍数改变,所以就会出现显示不正常。

然后,我们就可以把列表另外拿出来,不放在有UIStretch这个组件的物体下面,但这个时候下拉列表就会不适配已经缩放过的界面,所以我们就要用代码控制他自己的遮罩区域,以及DragPanel的子物体的缩放了。

下面是我的代码,用来控制下拉panel自身的遮罩区域以及改变自身子物体的大小:

using UnityEngine;
using System.Collections;

public class NGUI_ClippingAdjustor : MonoBehaviour {

	public GameObject stretch_obj;	//拥有UIStretch组件的物体
	public GameObject grid;//下拉panel的子物体grid
	
	Vector3 stretch_scale = Vector3.zero;
	UIPanel self_panel;
	
	
	void Update(){
		if(stretch_obj == null || stretch_scale == stretch_obj.transform.localScale)
			return;
		
		//设置项目的宽度
		stretch_scale = stretch_obj.transform.localScale;
		grid.transform.localScale = stretch_scale;
		
		//设置显示区域的大小
		self_panel = gameObject.GetComponent<UIPanel>();
		Vector4 old_range = self_panel.clipRange;
		self_panel.clipRange = new Vector4(old_range.x,old_range.y,
															   old_range.z * stretch_scale.x,old_range.w * stretch_scale.y);
	}
	
}


然后,我的界面结构是这样的:



AchievePanel就是我的下拉Panel,而NotListPanel就是我的界面,他的属性为:



我自己的原适配的比例是480*800,所以那些参数就这样了,当然不同的分辨率就要改变了。

这样就可以适配啦~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐