最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity實(shí)現(xiàn)ScrollView滑動(dòng)吸附功能

 更新時(shí)間:2020年09月29日 08:23:31   作者:INoriEGOIST  
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)ScrollView滑動(dòng)吸附功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Unity實(shí)現(xiàn)ScrollView滑動(dòng)吸附的具體代碼,供大家參考,具體內(nèi)容如下

最近在做一個(gè)展示模塊的時(shí)候遇到了一個(gè)需要實(shí)現(xiàn)滑動(dòng)窗口并且能固定吸附距離的需求,借助UGUI的ScrollView的API以及Dotween實(shí)現(xiàn)了這個(gè)功能。主要核心邏輯就是檢測Content節(jié)點(diǎn)的RectTransform的localPosX的移動(dòng)距離然后繼承實(shí)現(xiàn)OnDrag幾個(gè)接口來完成拖動(dòng)再松開自動(dòng)吸附到具體的位置。具體效果如下

另外說一下有幾個(gè)ScrollView自帶的API需要設(shè)置一下,一個(gè)事Movement Type設(shè)置成Unrestricted,以及關(guān)閉Inertia,這樣才能關(guān)閉ScrollView自帶的最大距離移動(dòng)控制不會(huì)導(dǎo)致在松手吸附過程中因?yàn)橥蟿?dòng)距離大于了左右兩邊限制而最終的移動(dòng)結(jié)束的坐標(biāo)位置不對(duì)。

下面貼一下代碼,腳本直接附在Content物體上既可。

Tip:代碼里的450 225是一個(gè)子物體寬度的加上content的Space距離,我演示的工程師一個(gè)Image420的寬度 30的HorLayout Space,225則是這個(gè)距離/2,可以根據(jù)具體需求去改變由于只是為了出個(gè)DEMO就沒有寫成變量

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
using DG.Tweening;
using DG.Tweening.Core.Easing;
using UnityEngine.Experimental.UIElements;

public class ScorllViewAutoHandler : MonoBehaviour, IEndDragHandler, IBeginDragHandler, IDragHandler
{
 private GameObject Scroll;
 private ScrollRect sc;
 private float OriginPosX;
 private float offsetX;
 private int CurIndex;
 private bool isDragging = false;
 private bool TimerFlag = false;
 private float Timer;
 // Start is called before the first frame update
 void Start()
 {
 CurIndex = 0;
 Scroll = this.gameObject;
 sc = Scroll.transform.parent.transform.parent.gameObject.GetComponent<ScrollRect>();
 }
 public void OnEndDrag(PointerEventData eventData)
 {
 int tempIndex=0;
 sc.OnEndDrag(eventData);
 offsetX = this.transform.localPosition.x - OriginPosX;
 if (Mathf.Abs(offsetX) % 450 < 225)
 {
  tempIndex = (int)(Mathf.Abs(offsetX) / 450);
  int _TempTargetIndex = 0;
  if (offsetX <0)
  {
  _TempTargetIndex = CurIndex + tempIndex;
  }
  else
  {
  _TempTargetIndex = CurIndex - tempIndex;
  }
  if (_TempTargetIndex >= 0 && _TempTargetIndex <= Scroll.transform.childCount - 1)
  {
  _TempTargetIndex = _TempTargetIndex;
  }
  else if (_TempTargetIndex < 0)
  {
  _TempTargetIndex = 0;
  }
  else
  {
  _TempTargetIndex = Scroll.transform.childCount - 1;
  }
  Debug.LogError("本次位移目標(biāo)" + _TempTargetIndex + "初始" + CurIndex);
  this.transform.DOLocalMoveX(_TempTargetIndex*450, 0.5f).SetEase(Ease.OutBack);
 }
 else
 {
  tempIndex = (int)(Mathf.Abs(offsetX) / 450);
  tempIndex += 1;
  int _TempTargetIndex = 0;
  if (offsetX < 0)
  {
  _TempTargetIndex = CurIndex + tempIndex;
  }
  else
  {
  _TempTargetIndex = CurIndex - tempIndex;
  }
  if (_TempTargetIndex >= 0 && _TempTargetIndex <= Scroll.transform.childCount - 1)
  {
  _TempTargetIndex = _TempTargetIndex;
  }
  else if (_TempTargetIndex < 0)
  {
  _TempTargetIndex = 0;
  }
  else
  {
  _TempTargetIndex = Scroll.transform.childCount - 1;
  }
  Debug.LogError("本次位移目標(biāo)" + _TempTargetIndex + "初始" + CurIndex);
  this.transform.DOLocalMoveX(_TempTargetIndex*450, 0.5f).SetEase(Ease.OutBack);
 }
 }

 public void OnBeginDrag(PointerEventData eventData)
 {
 sc.OnBeginDrag(eventData);
 OriginPosX = this.transform.localPosition.x;
 CurIndex = (int)(Mathf.Abs(this.transform.localPosition.x) / 450);
 offsetX = 0;
 //當(dāng)鼠標(biāo)在A對(duì)象按下并開始拖拽時(shí) A對(duì)象響應(yīng)此事件
 // 此事件在OnInitializePotentialDrag之后響應(yīng) OnDrag之前響應(yīng)
 //Debug.Log("OnBeginDrag " );
 }

 public void OnDrag(PointerEventData eventData)
 {
 sc.OnDrag(eventData);
 //Debug.LogError("Dragging" );
 }
}

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn)

    C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn)

    這篇文章主要介紹了C# 數(shù)獨(dú)求解算法的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • C#文件路徑操作詳細(xì)總結(jié)

    C#文件路徑操作詳細(xì)總結(jié)

    本篇文章主要是對(duì)C#中的文件路徑操作進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-01-01
  • C#創(chuàng)建Excel多級(jí)分組的方法

    C#創(chuàng)建Excel多級(jí)分組的方法

    這篇文章主要為大家詳細(xì)介紹了C#創(chuàng)建Excel多級(jí)分組的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 基于C# 生成Zip壓縮包代碼

    基于C# 生成Zip壓縮包代碼

    壓縮包制作也是很多項(xiàng)目中需要用到的功能。接下來通過本文給大家介紹基于C# 生成Zip壓縮包代碼,對(duì)c生成zip壓縮包相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧
    2016-04-04
  • WPF?Trigger改變屬性無效問題排查示例詳解

    WPF?Trigger改變屬性無效問題排查示例詳解

    這篇文章主要為大家介紹了WPF?Trigger改變屬性無效問題排查示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • c# 利用易福門振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法

    c# 利用易福門振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法

    這篇文章主要介紹了c# 利用易福門振動(dòng)模塊VSE002采集振動(dòng)數(shù)據(jù)的方法,本文通過圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • c#使用netmail方式發(fā)送郵件示例

    c#使用netmail方式發(fā)送郵件示例

    這篇文章主要介紹了c#使用netmail方式發(fā)送郵件的示例,大家參考使用吧
    2014-01-01
  • C#調(diào)用sql2000存儲(chǔ)過程方法小結(jié)

    C#調(diào)用sql2000存儲(chǔ)過程方法小結(jié)

    這篇文章主要介紹了C#調(diào)用sql2000存儲(chǔ)過程的方法,以實(shí)例形式分別對(duì)調(diào)用帶輸入?yún)?shù)及輸出參數(shù)的存儲(chǔ)過程進(jìn)行了詳細(xì)分析,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-10-10
  • Unity UGUI的LayoutElement布局元素組件介紹使用示例

    Unity UGUI的LayoutElement布局元素組件介紹使用示例

    這篇文章主要為大家介紹了Unity UGUI的LayoutElement布局元素組件介紹使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • C#讀寫共享文件夾的方法

    C#讀寫共享文件夾的方法

    這篇文章主要為大家詳細(xì)介紹了C#讀寫共享文件夾的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05

最新評(píng)論

枣庄市| 宜良县| 屏南县| 都安| 宜昌市| 江都市| 建昌县| 合水县| 观塘区| 太谷县| 鹿泉市| 玛多县| 会泽县| 余姚市| 全椒县| 济南市| 教育| 锦屏县| 卢氏县| 微博| 洛宁县| 白朗县| 丽水市| 蓝田县| 新野县| 都安| 邹城市| 福贡县| 秀山| 台东市| 四子王旗| 海盐县| 宜昌市| 德庆县| 佛冈县| 禹城市| 江西省| 昭苏县| 大理市| 临朐县| 伊宁市|