首页 > Unity3D频道 > 【UGUI研究院】 > UGUI研究院之界面中使用DoTween(七)
2014
10-27

UGUI研究院之界面中使用DoTween(七)

因为NGUI中已经有UITween了,可是UGUI中是没有这样的Tween的。我看过UGUI的Demo它的实现方式是用Animator来做的,这样每一个需要移动的对象就要挂上一个AmimationController并且还要去编辑动画。。 想想都恐怖,我觉得真没必要那么做。。

我强烈建议新项目使用DoTween。http://dotween.demigiant.com/ 网址要翻墙,不然打不开。不要紧后面我把下载地址提供出来。 (目前DoTween还是测试版本)DoTween的文档写的非常详细,所以我就简单的只写两句代码,为大家抛砖引玉一下即可。

不得不说的是,因为在做游戏暂停的时候通常会使用Time.Scale = 0 ,可是暂停的时候UI如果需要继续有动画怎么办呢?在DoTween中只需要设置         tweener.SetUpdate(true); 即可。意思就是这个Tween是忽略TimeScale,如果不写的话 tweener.SetUpdate 是 false。

using DG.Tweening; //不能少了这个命名空间。

Tween的移动类型有很多种,比如匀速运动、加速运动、减速运动,等等。如果你拿捏不准你需要用什么移动类形式。

http://www.robertpenner.com/easing/easing_demo.html 你可以在这里预览一下那种移动类型更佳适合你。

代码中我们设置了图片的移动 和 褪色,因为移动的Tween设置了忽略Time.Scale,所以代码中Time.Scale =0时,图片的Tween响应了位移操作,然后褪色的Tween却没有。

UGUI研究院之界面中使用DoTween(七) - 雨松MOMO程序研究院 - 1最后是DoTween的类库,如果你没有翻墙就下载我的吧, 是最新的。 欢迎大家在留言处和我一起讨论,加油!Fighting!

http://pan.baidu.com/s/1o6qiefC

 

雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!

--

最后编辑:
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
捐 赠如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。

  1. 松哥,用dotween 调整ugui的 sizeDelta(ui的长宽尺寸)怎么弄?,我在官方文档上看到了 DOSizeDelta(Vector2 to, float duration, bool snapping),但是我下载的是最新版本的 却没有这个方法。

  2. 大神,有没有用过DotweenPath呢?有木有什么方法能调节某些路点间的速度来达到不同速度的效果呢(像过山车那样有快有慢的效果,或者有比较好的能做类似效果的路径插件推荐一个吧 UGUI研究院之界面中使用DoTween(七) - 雨松MOMO程序研究院 - 1 )?

  3. MoMo你好,我是最近才开始用Unity的,今年大学毕业,刚开始工作。每次遇到问题都能看到你的文章,感觉是你的文章一路陪着我在学习uGUI。希望你有时间的话能够多更新一些知识。另外我想问一下,DOTween怎么实现重复动作,比如一个物体一直在抖动等。类似Cocos的repeatForever

  4. 可能评论的 有点太晚了 不过雨凇大神 有一个问题 怎么在domove过程中对东西进行修改位置 类似 itween iTween.MoveTo(obj, iTween.Hash(“isLocal”,***,); 这种 往过目!~

    • 无意中又来到这里。问的问题还没有回复,我说你知道就告诉下,不知道也回复下。。。这个问题很幼稚么???
      反正国内没搜到。
      For example. If you want to call a function with no parameters you just do this, as you already know:
      Code (csharp):
      .OnComplete(MyFunction)

      If instead your function requires parameters, say hello to lambdas.
      For example, if you want to call this function which requires 2 ints as parameters…
      Code (csharp):
      MyFunctionWithParameters(int firstInt, int secondInt)
      {
      // Do something blahblah
      }
      …you do like this…
      Code (csharp):
      .OnComplete(()=> MyFunctionWithParameters(2,3))

  5. 雨松大大你好,最近遇到了一些问题,就是跟DOTween有关。您这里给出了单个动画的忽略Unity的timeScale的解决方法,不知道您是否研究过有没有全局的动画的忽略方法?去看了他们的api,觉得DOTween.defaultTimeScaleIndependent和DOTween.timeScale可能是我想要的东西,但经过实际实验后似乎没用(我哪里写错了么?)然后我根据setUpdate(true)这个方法中实际所指的属性independentUpdate来去索引整篇文档,并没有找到其余设置,因此希望在您这里获得帮助,不知你是否研究过呢?

    • 抱歉,我的错,我设置了一组动画之间的延迟间隔,然后忘记了这件事儿,DOTween.defaultTimeScaleIndependent = true就可以轻松实现忽略Unity缩放比,仅限于在该脚本所挂载的游戏物体上。

  6. MO大 请问有没有在两个PATH节点之间设置旋转量的方法我目前使用iTweenPath绘制节点,并放进DoTween中跑因为旋转及分段速度的需求,对iTweenPath、iTweenPathEditor做了点扩充旋转部分主要新增了一个rotation阵列,也就是每个path节点除了position值还有rotation值但是目前看DoTween旋转的部份,只能做一段时间之间的旋转,没有管道附加在DOPath的方法上考虑过使用在每个节点使用OnWayPointChange(),用DORotate(目标角度,时间)设置两点之间的旋转量,但是因为无法得知两个path节点之间的经过时间所以无法实现也考虑过新增另一个使用DoTween的参考点,并用lookat的方式对准那个参考点,来实现而这算是一个好方法,对于一些状况也有优点,但是致命缺点就是给编辑者操作起来不够简便,并且有点混乱DoTween不是一个开源插件无法自行扩充或参考代码,想请问MO大,有没有其它方法可以实现

    • MO大我再补充一下 还考虑过一个方式如果不使用DOPath 而是把每两个节点拿出来做DOMove(目标座标,时间),就可以用DORotate(目标角度,时间) 添加相同的时间量实现每段位移都附加旋转的功能但是也有一个问题就是使用这个方法每段位移都只能是一段直线无法像DOPath()一样拥有经过计算后的平滑曲线移动

  7. 雨松大大,我用的DOPath的这个TWeen动画不能通过调用mytween.Pause();这种方式暂停,为什么呢?但是我用极端的DOTween.PauseAll();就可以了。

  8. MOMO大神,对于弄3D捕鱼(就像捕鱼大人3)的路径方面,我想请教下我要用什么插件。我本来用Itween,但是在3D水中,会有深度,鱼可能会出现穿透。这样就要处理,路径就要变化,会繁琐。请问有没有好的神思路来解决这个问题。

      • 主要是,模型穿透这不知道怎么解决。比如两条深度一样长的鱼游到一起,这要怎么解决,模型重叠。momo大神有什么思路吗(个人:碰撞到检测,在重新分配路线。但是路径上会有很深度相同的鱼,这中操作会很频繁。)

        • momo 大神 ,我处理鱼叠加穿透的思路是:渲染先后来弄得。但是我现在的知识面让我只想到用shader中的渲染队列来控制渲染层级。这样会出现,我要对render.material的 renderQueue进行修改,这样就会造成内存重新new出一份来,过多会出现内存溢出。请问你怎么处理渲染顺序?

      • momo 大神 ,我处理鱼叠加穿透的思路是:渲染先后来弄得。但是我现在的知识面让我只想到用shader中的渲染队列来控制渲染层级。这样会出现,我要对render.material的 renderQueue进行修改,这样就会造成内存重新new出一份来,过多会出现内存溢出。请问你怎么处理渲染顺序?

  9. 雨松MOMO,你好,我想问一下DOTween的用法 , mySequence.Insert(0, transform.DOScale(new Vector3(1.2f, 1.2f, 1.2f), 0.2f)); mySequence.Insert(1, transform.DOScale(new Vector3(1, 1, 1), 0.1f)); 为什么 播放 动画0 在播放 动画1 是 会停顿呢,有什么方法不两个动画 不停顿吗?

  10. 在5.1下,导入DOTween Pro v0.9.290 后,文本文字会消失,或变乱,暂时只在编辑下会这样,运行后不会不会有别的问题就不知道了。

  11. foreach (MaskableGraphic gra in graphicAll){ DOTween.To(() => img.color, x => img.color = x, new Color(1, 1, 1, 0), scaleDuration/10).SetOptions(true);}这么做,DoTween只做一次,怎么让它为每个MaskableGraphic都添加动画呢?

  12. 雨松MOMO , 你好 , 我有个DOTWEEN的问题想请教一下你 , 你有空看到的烦请帮一下我,谢谢你. 我用DOPath做来回运动的动作,,但我希望他从A点走到B点后,在B点返回A点时, 前进方向是一直都是对象的Z轴所指的方向, 用HOtween的OrientToPath() 可以做到这一点,但现在想转用Dotween做以后的项目, 但遇到这个问题 没找到方法解决.

    • void Start() { transform.DOPath(waypoints, 1).OnWaypointChange(MyCallback);}void MyCallback(int waypointIndex) { Debug.Log(“Waypoint index changed to ” + waypointIndex);}像这样 来监听DoTween改变路径的事件 然后look At 下一个点就行了。。

  13. MOMO大拿,请问一下DoTween怎么像NGUI Tween那样播放复合动画呢?(我指的是Tween Group),找了许久没有找到咧

  14. 麻烦问momo一个跟这个不大相干的问题。这个新版的Dotween中,他的一些tween方法都是直接附属于 Transform 类下的,但是调用方法时代码提示又显示方法是属于Tweener的,(比如调用DOMove 直接调 transform.DOMove 就可以使用)那我想问, Dotween是如何做到在 官方的API上添加自己的方法的??这直接是如何联系起来的??

  15. 遇到一個問題想請問一下雨松,我用Unity製作PC版Game,遊戲內有使用DoTween做動畫,但我按下視窗上X會回到登入畫面,在進去遊戲,用DoTween做的所有動畫都不能正常顯示,請問有甚麼解決辦法嗎??拜託了~謝謝

  16. dotween 支持 method chaining,一行就可以搞定,不用写成多行。 image.rectTransform.DOMove(Vector3.zero,1f).SetUpdate(true).SetEase(Ease.Linear).OnComplete(()=>Debug.Log(“移动完毕事件”));

  17. 您好,我尝试了一下,发现有个问题,请问一下,我设置的缓慢改变透明度,为什么脚本附在这个物体上,其他物体没有附上该脚本,但是一样会有这种效果出现呢?就是我只想让单独的这个text改变透明度,但是场景上其他text和它一起改变了透明度,然后我没有指定让他们改变呀?怎么回事呢?请问