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

游戏项目必须要与多个分辨率适配,使用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,所以那些参数就这样了,当然不同的分辨率就要改变了。

这样就可以适配啦~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值