2D 滚动Item效果

实现效果图如下 :


UI 设置如下 :


<span style="background-color: rgb(0, 0, 0);">using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class TestScrollView : MonoBehaviour {
	public UIScrollView _Scrollview;
	public List<GameObject> _Items = new List<GameObject>();
	public Camera _Camera;

	void Start () {
		SetPos();
	}

	void SetPos ()
	{
		Vector3 offset = new Vector3(-400f, 0f, 0f); // 默认第一个格子位置
		for (int i = 0; i < 10; i++)
		{
			GameObject go = _Items[i];
			go.transform.localPosition = Vector3.zero;
			go.transform.localPosition += offset;
			offset += new Vector3(260f, 0f, 0f);
		}
	}
	void Update()
	{
		if (_Scrollview.isDragging && Time.frameCount % 2 == 0)
		{
			CalculateItemScale();
		}
		else if (_Scrollview.GetComponent<SpringPanel>() != null)
		{
			if (_Scrollview.GetComponent<SpringPanel>().enabled)
			{
				CalculateItemScale();
			}
		}
	}
	void CalculateItemScale()
	{
		Vector3[] corners = _Scrollview.panel.worldCorners;
		Vector3 panelCenter = (corners[2] + corners[0]) * 0.5f;

		Vector3 momentum = _Scrollview.currentMomentum * _Scrollview.momentumAmount;
		Vector3 moveDelta = NGUIMath.SpringDampen(ref momentum, 9f, 2f);
		Vector3 pickingPoint = panelCenter - moveDelta * 0.01f;
		
		Vector3 centerPos = _Camera.WorldToScreenPoint(Vector3.zero);
		float maxScale = 0f;
		for (int i = 0; i < _Scrollview.transform.childCount; ++i)
		{
			Transform t = _Scrollview.transform.GetChild(i);
			if (!t.gameObject.activeInHierarchy) continue;
			Vector3 pos = _Camera.WorldToScreenPoint(t.position);
			Vector3 delta = pos - centerPos;
			t.transform.localScale = new Vector3(1f - Mathf.Abs(delta.x / 4400f) * 6, 1f - Mathf.Abs(delta.x / 4400f) * 6, 1f);
			float scale = Vector3.SqrMagnitude(t.transform.localScale);
			if (scale > maxScale)
			{
				maxScale = scale;
			}
			float offsetY = -320f * Mathf.Abs(delta.x / 4400f);
			t.transform.localPosition = new Vector3(t.transform.localPosition.x, Mathf.RoundToInt(offsetY), t.transform.localPosition.z);
			
			//t.GetComponent<UISprite>().alpha = 1f - Mathf.Abs(delta.x / 4400f) * 3f;
		}
	}
}</span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值