麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Unity中DOTween的用法解析

Unity中DOTween的用法解析

來源:千鋒教育
發布人:syq
時間: 2022-06-08 11:58:00 1654660680

  /*

  * DOTween真的比iTween好很多:

  * 1.編寫方面更加人性化

  * 2.效率高很多

DOTween的用法

  * DoTween插件的基本概念以及簡介:

  * 1.DoTween實現的是通用的緩動算法,用于給Unity中的游戲對象添加動作動畫。

  * 2.DoTween的API風格一律采用鏈式調用,再配以Lambda匿名函數的調用,可以配置出各種各樣想要的豐富的動畫效果。

  * 3.DoTween還可以實現隊列延遲回調函數,也能完成各種異步延遲執行的功能。

  * 4.DoTween為了方便開發者使用,對各種Unity的腳本對象進行了函數綁定,例如:

  * Transform, Color, Text, Material等都可以直接調用DoTween的動畫函數

  *

  * 綁定的快捷方式動畫函數API

  * 函數名稱解釋:

  * 都是以DO開頭,帶Local的就是局部坐標系,不帶的指的是基于世界坐標系

  * 所有函數調用都是鏈式調用

  * 可以自己設置緩動算法的類型,也可以用一些已經配置好的緩動算法,比如跳躍Jump

  * 這類函數的API調用更符合常用函數的使用習慣,move就是移動,scale就是縮放,rotation就是旋轉,color就是顏色,數值的變化就是float

  * 更多的功能用法直接在程序中自動補全就可以理解意思了

  *

  * 1.以DO開頭的方法:就是補間動畫的方法。例如:transform.DOMoveX(100,1)

  * 2.以Set開頭的方法:設置補間動畫的一些屬性。例如:myTween.SetLoops(4, LoopType.Yoyo)

  * 3.以On開頭的方法:補間動畫的回調方法。例如:myTween.OnStart(myStartFunction)

  好了,正式開始!首先去Unity應用商城下載DOTween,導入工程。

  */

  using System.Collections;

  using UnityEngine;

  using DG.Tweening;

  using UnityEngine.UI;

  public class CubeAnimator : MonoBehaviour

  {

    Camera _camera;

    Material material;

    public Text text;

    Tweener _tweener;

    void Start()

    {

  /*DOTween初始化與全局設置:

  當你第一次創建一個Tween時,DOTween就會自動初始化(只初始化一次)。

  當然,也可以使用DOTween.Init方法進行自定義,但要在第一次創建一個Tween前。所有創建的Tween都會受DOTween.Init方法的影響。

  *recycleAllByDefault :如果為true,則當Tween完成時就會被回收,放到一個池中;否則就會被destroy

  *useSafeMode :效率會稍微降低,但更安全

  *logBehaviour :默認值為只打印錯誤信息

  */

  DOTween.Init(false, true, LogBehaviour.ErrorsOnly);

  _camera = Camera.main;

  material = GetComponent().material;

  //一、Unity常用組件拓展方法

  //(1) Transform拓展方法

  TestTransformFuncAnim();

  //(2) _camera拓展方法

  TestCameraFuncAnim();

  //(3) Material拓展方法

  TestMaterialFuncAnim();

  //(4) Text拓展方法

  TestTextFuncAnim();

  //二、Dotween常用方法

  //Sequence動畫序列函數API

  /*

  * 基本解釋說明:

  * 動畫序列其實就是包含了一組Tweener并且操作其他Tweener的一個工具

  * 動畫序列并不一定要一個接著一個的播放和執行

  * 動畫序列之間可以重疊和重復

  * 你可以以任何你所期望的形式混合夾雜著去使用它們

  * DOTween.Sequence()會創建一個動畫序列對象,以后所有的Sequence函數都會返回這個Sequence對象,也就是說動畫序列也可以鏈式調用

  * Append(tweener) 可以在隊尾追加一個tweener,會按照順序依次執行這個tweener序列,一個tweener完成后執行下一個。

  * Insert(time, tweener) 可以在隊列中插入一個tweener,第1個參數代表插入的時間點,第2個參數代表在此時間點插入的動畫。

  * AppendInterval(time) 可以在隊尾追加一個時間間隔功能函數,在隊列執行的過程中,停頓一個時間,然后繼續執行。

  * AppendCallback(func) 可以在隊尾追加一個匿名函數,在隊列中執行一個回調。

  */

  //(5) Sequence 隊列

  TestSequenceAnim();

  //(6) Tweener的設置

  SetterTweener();

  //7.關于Ease緩動函數的說明

  /*

  * 基本概念說明:

  * 緩動函數是指動畫效果在執行時的速度,使其看起來更加真實。

  * Ease.InSine 表示正弦加速動作

  * Ease.OutSine 表示正弦減速動作

  * Ease.InOutSine 表示正弦加速減速動作

  * 每個效果都分3種緩動方式:

  * (1).easeIn:從0開始加速的緩動

  * (2).easeOut:減速到0的緩動

  * (3).easeInOut:前半段從0開始加速,后半段減速到0的緩動

  * 其中Linear是線性緩動,也叫無緩動效果,沒有上述說明中的效果。

  */

  //(7) 運動曲線的設置

  TestEaseFuncAnima();

  //(8) 動畫回調事件

  TestCallBack();

  //(9) 動畫控制方法

  TestAnimatorController();

  //(10) 獲取數據方法

  GetTweenerDat();

  //(11) 協程方法

  StartCoroutine(Wait());

  }

  //(1) Transform拓展方法

  private void TestTransformFuncAnim()

  {

  //Position

  //1)改變世界坐標

  //移動方法,第一個參數是要移動到的目標點,不是移動這個向量的距離

  transform.DOMove(new Vector3(1, 1, 1), 2);

  //只控制x軸上的移動,其他兩個方向同理

  transform.DOMoveX(1, 2);

  //2)改變局部坐標

  transform.DOLocalMove(new Vector3(1, 1, 1), 2);

  transform.DOLocalMoveX(1, 2);

  //Rotation

  //1)世界旋轉

  //旋轉到給定的值,改變的是歐拉角

  transform.DORotate(new Vector3(0, 90, 0), 2);

  //旋轉到給定的值,改變的是四元數

  transform.DORotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);

  //2)局部旋轉

  // 旋轉到給定的值,改變的是歐拉角

  transform.DOLocalRotate(new Vector3(0, 90, 0), 2);

  // 旋轉到給定的值,改變的是四元數

  transform.DOLocalRotateQuaternion(new Quaternion(0.1f, 0.1f, 0.1f, 0.1f), 2);

  // 在給定時間內,平滑的讓自身的z軸正方向指向目標點

  transform.DOLookAt(new Vector3(0, 0, 0), 2);

  // Scale

  //同上面一樣,這里改變物體的縮放到目標值

  transform.DOScale(new Vector3(2, 2, 2), 2);

  //其他兩個軸向同理

  transform.DOScaleX(3, 2);

  //Punch

  /*

  第一個參數 punch:表示方向及強度

  第二個參數 duration:表示動畫持續時間

  第三個參數 vibrato:震動次數

  第四個參數 elascity: 這個值是0到1的

  當為0時,就是在起始點到目標點之間運動

  不為0時,會把你賦的值乘上一個參數,作為你運動方向反方向的點,物體在這個點和目標點之間運動

  */

  transform.DOPunchPosition(new Vector3(0, 1, 0), 2, 2, 0.1f);

  transform.DOPunchRotation(new Vector3(0, 90, 0), 2, 2, 0.1f);

  transform.DOPunchScale(new Vector3(2, 2, 2), 2, 2, 0.1f);

  //Shake

  /*

  * 參數:持續時間,力量,震動,隨機性,淡出

  力量:實際就是震動的幅度,可以理解成相機施加的力的大小 使用Vector3可以選擇每個軸向不同的強度

  震動:震動次數

  隨機性:改變震動方向的隨機值(大小:0~180)

  淡出:就是運動最后是否緩慢移動回到原本位置

  */

  transform.DOShakePosition(1, 5, 10, 50, true);

  transform.DOShakeRotation(3);

  transform.DOShakeScale(3);

  //帶Blend名稱的方法,允許混合動畫

  //原本同時執行兩個Move方法,只會執行最新的一個動畫命令

  //例如:

  transform.DOMove(Vector3.one, 2);

  transform.DOMove(Vector3.one * 2, 2);

  //結果是物體運動到了(2,2,2)坐標上

  //DOBlendableMoveBy方法有兩個特點

  //1)允許多個同時執行

  //例如:

  transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);

  transform.DOBlendableMoveBy(new Vector3(-1, 0, 0), 1);

  //假設起始為(0,0,0),最后動畫停止時的坐標就是(0,1,1)

  //2)它是增量動畫

  transform.DOBlendableMoveBy(new Vector3(1, 1, 1), 1);

  //假設其實點為(1,1,1),最后動畫停止時的坐標就是(2,2,2)

  //它的參數不是目標點,而是要移動的量

  /*以下三個函數同理

  transform.DOBlendableRotateBy

  transform.DOBlendableScaleBy()

  transform.DOBlendablePunchRotation()

  */

 }

  //(2) Camera拓展方法

  private void TestCameraFuncAnim()

  {

  //1)調整屏幕視角的寬高比 第一個參數是寬高的比值

  _camera.DOAspect(0.6f, 2);

  //2)改變相機background參數的顏色

  _camera.DOColor(Color.blue, 2);

  //3)改變相機近切面的值

  _camera.DONearClipPlane(200, 2);

  //4)改變相機遠切面的值

  _camera.DOFarClipPlane(2000, 2);

  //5)改變相機FOV的值

  _camera.DOFieldOfView(30, 2);

  //6)改變相機正交大小

  _camera.DOOrthoSize(10, 2);

  //7)按照屏幕像素計算的顯示范圍

  _camera.DOPixelRect(new Rect(0f, 0f, 600f, 500f), 2);

  //8)按照屏幕百分比計算的顯示范圍

  _camera.DORect(new Rect(0.5f, 0.5f, 0.5f, 0.5f), 2);

  /*

  9)相機震動

  相機震動效果 參數:持續時間,力量,震動,隨機性,淡出

  力量:實際就是震動的幅度,可以理解成相機施加的力的大小 使用Vector3可以選擇每個軸向不同的強度

  震動:震動次數

  隨機性:改變震動方向的隨機值(大小:0~180)

  淡出:就是運動最后是否緩慢移動回到原本位置

  */

  _camera.DOShakePosition(1, 10, 10, 50, false);

 }

  //(3) Material拓展方法

  private void TestMaterialFuncAnim()

  {

  // 1)改變顏色

  material.DOColor(Color.black, 2);

  // 2)按照shader的屬性名,修改顏色

  material.DOColor(Color.clear, "_Color", 2);

  // 3)修改alpha值

  material.DOFade(0, 2);

  // 4)顏色漸變

  // Gradient是unity的漸變編輯器(下面有漸變編輯器的圖)

  // material.DOGradientColor(Gradient, "_Color", 3);

  // 5)改變材質offset的值

  material.DOOffset(new Vector2(1, 1), 2);

  // 6)改變提供的shader屬性的名稱對應的Vector4值

  material.DOVector(new Vector4(0, 0, 0, 1), "_Color", 3);

  // 7)顏色混合

  // 跟位置混合動畫同理,可以同時執行而不干擾,產生混合在一起的顏色

  material.DOBlendableColor(Color.red, "_Color", 3);

 }

  //(4) Text拓展方法

  private void TestTextFuncAnim()

  {

  //頭三個都是常規方法,不多介紹了

  text.DOColor(Color.black, 2);

  text.DOFade(0, 2);

  text.DOBlendableColor(Color.black, 2);

  //打字機效果

  //是把第一個參數傳入的內容按照時間,一個字一個字的輸入到文本框中

  text.DOText("context", 2);

  }

  //(5) Sequence 隊列

  private void TestSequenceAnim()

  {

  Sequence quence = DOTween.Sequence();

  //1)添加動畫到隊列中

  quence.Append(transform.DOMove(Vector3.one, 2));

  //2)添加時間間隔

  quence.AppendInterval(1);

  //3)按時間點插入動畫

  //第一個參數為時間,此方法把動畫插入到規定的時間點

  // 以這句話為例,它把DORotate動畫添加到此隊列的0秒時執行,雖然它不是最先添加進隊列的

  quence.Insert(0, transform.DORotate(new Vector3(0, 90, 0), 1));

  //4)加入當前動畫

  // Join會加入和讓動畫與當前正在執行的動畫一起執行

  //如下兩行代碼,DOMove會和DOScale一起執行

  quence.Append(transform.DOScale(new Vector3(2, 2, 2), 2));

  quence.Join(transform.DOMove(Vector3.zero, 2));

  //5)預添加動畫

  // 預添加 會直接添加動畫到Append的前面,也就是最開始的時候

  //quence.Prepend(transform.DOScale(Vector3.one * 0.5f, 1));

  //這里需要特別說一下預添加的執行順序問題

  //它這里也采取了隊列的性質,不過,預添加與原本的的隊列相比是一個反向隊列

  //例如:

  // Sequence quence = DOTween.Sequence();

  //quence.Append(transform.DOMove(Vector3.one, 2));

  //quence.Prepend(transform.DOMove(-Vector3.one * 2, 2));

  //quence.PrependInterval(1);

  //執行順序是 PrependInterval----Prepend---- - Append

  //就是最后添加的會在隊列的最頂端

  //6)預添加時間間隔

  quence.PrependInterval(1);

  // 回調函數

  // 1)預添加回調

  quence.PrependCallback(

  () => { Destroy(gameObject); }

 );

  // 2)在規定的時間點加入回調

  quence.InsertCallback(1,

  () => { Destroy(gameObject); }

 );

  //3)添加回調

  quence.AppendCallback(

  ()=>{ Destroy(gameObject); }

 );

}

  //(6) Tweener的設置

  private void SetterTweener()

  {

  TweenParams para = new TweenParams();

  // 1)設置動畫循環

  // 第一個參數是循環次數 - 1代表無限循環

  // 第二個參數是循環方式

  // Restart 重新開始

  // Yoyo 從起始點運動到目標點,再從目標點運動回來,這樣循環

  //Incremental 一直向著運動方向運動

  para.SetLoops(-1, LoopType.Yoyo);

  //2)設置參數

  transform.DOMove(Vector3.one, 2).SetAs(para);

  //3)設置自動殺死動畫

  transform.DOMove(Vector3.one, 1).SetAutoKill(true);

  //4)from補間

  // 例如;

  transform.DOMove(Vector3.one, 2).From(true);

  //From參數 isRelative(相對的):

  //為true,傳入的就是偏移量,即當前坐標 + 傳入值 = 目標值

  //為falese,傳入的就是目標值,即傳入值 = 目標值

  //5)設置動畫延時

  transform.DOMove(Vector3.one, 2).SetDelay(1);

  //6)設置動畫運動以速度為基準 例如:

  transform.DOMove(Vector3.one, 1).SetSpeedBased();

  //使用SetSpeedBased時,移動方式就變成以速度為基準

  //原本表示持續時間的第二個參數,就變成表示速度的參數,每秒移動的單位數

  //7)設置動畫ID

  transform.DOMove(Vector3.one, 2).SetId("Id");

  //8)設置是否可回收

  // 為true的話,動畫播放完會被回收,緩存下來,不然播完就直接銷毀

  transform.DOMove(Vector3.one, 2).SetRecyclable(true);

  //9)設置動畫為增量運動

  //例如:

  transform.DOMove(Vector3.one, 2).SetRelative(true);

  //SetRelative參數 isRelative(相對的):

  //為true,傳入的就是偏移量,即當前坐標 + 傳入值 = 目標值

  //為falese,傳入的就是目標值,即傳入值 = 目標值

  //10)設置動畫的幀函數

  //例如:

  transform.DOMove(Vector3.one, 2).SetUpdate(UpdateType.Normal, true);

  //第一個參數 UpdateType :選擇使用的幀函數

  //UpdateType.Normal:更新每一幀中更新要求。

  //UpdateType.Late:在LateUpdate調用期間更新每一幀。

  //UpdateType.Fixed:使用FixedUpdate調用進行更新。

  //UpdateType.Manual:通過手動DOTween.ManualUpdate調用進行更新。

  //第二個參數:為TRUE,則補間將忽略Unity的Time.timeScale

  }

  //(7) 運動曲線的設置

  private void TestEaseFuncAnima()

  {

  //關于Ease緩動函數的說明

  /*

  * 基本概念說明:

  * 緩動函數是指動畫效果在執行時的速度,使其看起來更加真實。

  * Ease.InSine 表示正弦加速動作

  * Ease.OutSine 表示正弦減速動作

  * Ease.InOutSine 表示正弦加速減速動作

  * 每個效果都分3種緩動方式:

  * (1).easeIn:從0開始加速的緩動

  * (2).easeOut:減速到0的緩動

  * (3).easeInOut:前半段從0開始加速,后半段減速到0的緩動

  * 其中Linear是線性緩動,也叫無緩動效果,沒有上述說明中的效果。

  */

  //線性緩動,勻速運動

  //transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.Linear);

  //先快后慢正弦運動

  transform.DOMove(new Vector3(0, 5, 0), 2).SetRelative().SetLoops(-1, LoopType.Yoyo).SetEase(Ease.InOutSine);

  }

  //(8) 動畫回調事件

  private void TestCallBack()

  {

  //1)動畫完成回調

  transform.DOMove(Vector3.one, 2).OnComplete(() => { });

  //2)動畫被殺死時回調

  transform.DOMove(Vector3.one, 2).OnKill(() => { });

  //3)動畫播放時回調,暫停后重新播放也會調用

  transform.DOMove(Vector3.one, 3).OnPlay(() => { });

  //4)動畫暫停時回調

  transform.DOMove(Vector3.one, 2).OnPause(() => { });

  //5)動畫回退時回調

  // 以下情況會被調用

  //使用DORestart重新播放時

  //使用Rewind倒播動畫完成時

  //使用DOFlip翻轉動畫完成時

  //使用DOPlayBackwards反向播放動畫完成時

  transform.DOMove(Vector3.one, 2).OnRewind(() => { });

  //6)只在第一次播放動畫時調用,在play之前調用

  transform.DOMove(Vector3.one, 2).OnStart(() => { });

  //7)完成單個循環周期時觸發

  transform.DOMove(Vector3.one, 2).OnStepComplete(() => { });

  //8)幀回調

  transform.DOMove(Vector3.one, 2).OnUpdate(() => { });

  //9)在路徑動畫時,改變目標點時的回調,參數為當前目標點的下標

  transform.DOMove(Vector3.one, 2).OnWaypointChange((value) => { });

  }

  //(9) 動畫控制方法

  private void TestAnimatorController()

  {

  //1)播放

  transform.DOPlay();

  //2)暫停

  transform.DOPause();

  // 3)重播

  transform.DORestart();

  // 4)倒播,此方法會直接退回起始點

  transform.DORewind();

  // 5)平滑倒播,此方法會按照之前的運動方式從當前位置退回起始點

  transform.DOSmoothRewind();

  // 6)殺死動畫

  transform.DOKill();

  // 7)翻轉補間的方向

  transform.DOFlip();

  // 8)跳轉時間點

  // 第一個參數跳轉的時間點,第二個參數是跳轉后是否播放動畫

  transform.DOGoto(1.5f, true);

  // 9)反向播放動畫

  // 反向播放動畫,在動畫播放到一半時執行,會退回起始點,在一開始執行看不到效果是因為,物體本身就在起始點

  transform.DOPlayBackwards();

  // 10)正向播放動畫

  // 正向播放動畫

  transform.DOPlayForward();

  // 11)TogglePause

  // 當暫停時,執行就繼續播放,播放時,執行就暫停

  transform.DOTogglePause();

 }

  private void GetTweenerDat()

  {

  // 一、類方法

  //1)返回所有暫停的動畫,沒有則返回null

  DOTween.PausedTweens();

  //2)返回所有真正播放的動畫,沒有則返回null

  DOTween.PlayingTweens();

  //3)獲取給定ID的數組

  //例如:

  DOTween.TweensById("id", true);

  //返回滿足條件的動畫數組

  //第一個參數是動畫的ID

  //第二個參數是是否只收集正在播放的動畫

  //4)返回給定對象的數組

  //例如:

  DOTween.TweensByTarget(transform, true);

  //返回滿足條件的動畫數組

  //第一個參數是播放動畫的對象

  //例如:transform.DOMove(Vector3.one, 2); 第一個參數就傳入transform

  // material.DOColor(Color.White, 2); 第一個參數就傳入材質對象material

  //第二個參數是是否只收集正在播放的動畫

  //5)收集傳入的對象是否有動畫在活動

  //例如:

  DOTween.IsTweening(transform);

  //第一個參數為檢測的對象

  //第二個參數為是否檢測動畫在播放狀態

  //為true時,給定對象在播放狀態時 返回true

  //為false時,只檢測給定對象是否有動畫(在pause狀態時也算)有則返回true

  // 6)正在播放的動畫的總數,目前處于延遲播放狀態的動畫也算

  DOTween.TotalPlayingTweens();

  // 二、實例方法

  _tweener = transform.DOMove(Vector3.one, 2);

  //1)表示動畫執行時間的屬性,可讀可寫

  _tweener.fullPosition = 1;

  // 2)表示動畫執行完的次數

  _tweener.CompletedLoops();

  // 3)獲取動畫的延遲時間

  _tweener.Delay();

  // 4)獲取動畫的持續時間

  // 參數為true 表示計算循環的時間,無限循環為Infinity

  _tweener.Duration(false);

  //5)動畫已播放的時間

  // 參數為true 表示計算循環的時間

  _tweener.Elapsed();

  //6)返回動畫進度的百分比

  // 起始點為0 目標點為1 當yoyo循環模式下,值會從0變到1再從1變到0

  _tweener.ElapsedDirectionalPercentage();

  //7)返回動畫區間已用的百分比

  //單次循環的數值為0到1

  //參數為 是否包含循環 為true時 返回值是循環總區間的已用百分比 若為無限循環 返回值為0

  _tweener.ElapsedPercentage(true);

  //8)動畫是否在活動

  _tweener.IsActive();

  // 9)是否是反向動畫

  _tweener.IsBackwards();

  //10)動畫是否完成

  _tweener.IsComplete();

  //11)是否以初始化

  _tweener.IsInitialized();

  //12)是否正在播放

  _tweener.IsPlaying();

  //13)返回循環次數, 無限循環為Infinity

  _tweener.Loops();

  }

  //協程方法

  private IEnumerator Wait()

  {

  _tweener = transform.DOMove(Vector3.one, 2);

  // 1)等待動畫執行完

  yield return _tweener.WaitForCompletion();

  //2)等待指定的循環次數

  //參數為執行次數,等待傳入的循環次數后,繼續執行

  //若是傳入的次數大于動畫的循環次數 則在動畫結束時繼續執行

  yield return _tweener.WaitForElapsedLoops(2);

  //3)等待動畫被殺死

  yield return _tweener.WaitForKill();

  //4)等待動畫執行指定時間

  //參數為時間,動畫執行傳入的時間之后或動畫執行完畢,繼續執行

  yield return _tweener.WaitForPosition(0.5f);

  //5)等待動畫回退

  // 以下情況會繼續執行函數

  //使用DORestart重新播放時

  //使用Rewind倒播動畫完成時

  //使用DOFlip翻轉動畫完成時

  //使用DOPlayBackwards反向播放動畫完成時

  yield return _tweener.WaitForRewind();

  // 6)等待Start執行后繼續執行

  yield return _tweener.WaitForStart();

  }

 }

 更多關于ITUnity培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 久久在精品线影院精品国产| 夜恋全部国产精品视频| 久久www免费人成看片入口| 国产在线观看免费完整版中文版| 电车上强制波多野结衣| 特级毛片www| 我要看a级毛片| 美女张开双腿让男生捅| 在线观看国产小屁孩cao大人| 蜜挑成熟时k8经典网| 黄文在线看| 被弄出白浆喷水了视频| 久久依人| 久草免费福利资源站| 中文字幕久久久久| 亚洲女初尝黑人巨高清 | 一女多男np疯狂伦交| 一级大黄色片| 岳女一起爽| 欧美草逼网站| 免费大黄网站在线观看| 免费一级在线| 国产视频一区二区在线播放 | 天天天天做夜夜夜做| 精品综合久久久久久98| 国产精品日韩欧美一区二区三区| 老板在办公室里揉护士的胸视频| 久草免费资源站| 日本老熟老太hd| 日本最新免费二区三区| 韩国三级最新理论电影| 再来一次好吗动漫免费观看| 男女一边摸一边做爽爽| 国产草草影院| 亚洲人成7777影视在线观看| 久久综合久久综合九色| 日韩一级一片| 爱情岛论坛亚洲永久入口口| 鲁啊鲁啊鲁在线视频播放| 国产免费观看a大片的网站| 久久精品中文字幕|