1. 建一個(gè)Image,設(shè)置寬高比為300*400,并添加Scroll Rect 和 Mask組件,并修改名稱為ViewPager。


2. 在ViewPager下添加 horizontal Layout Group 和 Scrollbar
? Scrollbar: 用于控制滑動(dòng),位置在Layout正下方,不會(huì)顯示
? horizontal Layout Group: 作為item的父布局,設(shè)置寬高比為1500*400,然后新建5個(gè)Image,大小都為300*400。

? 反選ViewPager中Mask組件后,可以看到item的情況如下:

3. 修改參數(shù)
? 1. 將layout于ViewPager中Scroll Rect的Content屬性綁定
? 2. 將Scrollbar與ViewPager中Horizontal Scrollbar綁定,反選Vertical屬性

4. 掛載腳本

? 腳本內(nèi)容如下:
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class CustomViewPage : MonoBehaviour
{
public Scrollbar m_Scrollbar;
public ScrollRect m_ScrollRect;
private float mTargetValue;
private bool mNeedMove = false;
private const float MOVE_SPEED = 1F;
private const float SMOOTH_TIME = 0.2F;
private float mMoveSpeed = 0f;
public void OnPointerDown()
{
mNeedMove = false;
}
public void OnPointerUp()
{
// 判斷當(dāng)前位于哪個(gè)區(qū)間,設(shè)置自動(dòng)滑動(dòng)至的位置
if (m_Scrollbar.value <= 0.125f)
{
mTargetValue = 0;
}
else if (m_Scrollbar.value <= 0.375f)
{
mTargetValue = 0.25f;
}
else if (m_Scrollbar.value <= 0.625f)
{
mTargetValue = 0.5f;
}
else if (m_Scrollbar.value <= 0.875f)
{
mTargetValue = 0.75f;
}
else
{
mTargetValue = 1f;
}
mNeedMove = true;
mMoveSpeed = 0;
}
void Update()
{
if (mNeedMove)
{
if (Mathf.Abs(m_Scrollbar.value - mTargetValue) < 0.01f)
{
m_Scrollbar.value = mTargetValue;
mNeedMove = false;
return;
}
m_Scrollbar.value = Mathf.SmoothDamp(m_Scrollbar.value, mTargetValue, ref mMoveSpeed, SMOOTH_TIME);
}
}
}
5. 在ViewPager上,添加Event Trigger組件,并且添加Pointer Up時(shí)間監(jiān)聽

以上就是左右步驟啦?。?br> 不過item的點(diǎn)擊事件,有點(diǎn)小瑕疵,我嘗試了新建5個(gè)Button,但是Button的點(diǎn)擊事件和滑動(dòng)會(huì)產(chǎn)生沖突,正常ScrollView中添加Item,并且添加點(diǎn)擊事件,是不會(huì)出現(xiàn)這種情況的,這里出現(xiàn)沖突的原因,應(yīng)該是掛載Event Trigger的原因。
正在想解決辦法,頭疼啊。。。