因为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; //不能少了这个命名空间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
void Start () { //让TimeScale = 0 Time.timeScale = 0; Image image = transform.Find("Image").GetComponent<Image>(); //调用DOmove方法来让图片移动 Tweener tweener = image.rectTransform.DOMove(Vector3.zero,1f); //设置这个Tween不受Time.scale影响 tweener.SetUpdate(true); //设置移动类型 tweener.SetEase(Ease.Linear); tweener.onComplete = delegate() { Debug.Log("移动完毕事件"); }; image.material.DOFade(0,1f).onComplete = delegate() { Debug.Log("褪色完毕事件"); }; } |
Tween的移动类型有很多种,比如匀速运动、加速运动、减速运动,等等。如果你拿捏不准你需要用什么移动类形式。
http://www.robertpenner.com/easing/easing_demo.html 你可以在这里预览一下那种移动类型更佳适合你。
代码中我们设置了图片的移动 和 褪色,因为移动的Tween设置了忽略Time.Scale,所以代码中Time.Scale =0时,图片的Tween响应了位移操作,然后褪色的Tween却没有。
最后是DoTween的类库,如果你没有翻墙就下载我的吧, 是最新的。 欢迎大家在留言处和我一起讨论,加油!Fighting!
http://pan.baidu.com/s/1o6qiefC
- 本文固定链接: https://www.xuanyusong.com/archives/3330
- 转载请注明: 雨松MOMO 于 雨松MOMO程序研究院 发表
一起fighting,正要研究这一块!
MoMo你好,我是最近才开始用Unity的,今年大学毕业,刚开始工作。每次遇到问题都能看到你的文章,感觉是你的文章一路陪着我在学习uGUI。希望你有时间的话能够多更新一些知识。另外我想问一下,DOTween怎么实现重复动作,比如一个物体一直在抖动等。类似Cocos的repeatForever
loops = -1 就可以了
unity5.x的 uGui Text 没有DOFade,DOColor之类的方法了么,只能用修改材质的方法吗
应该有才对。。
这个插件动画好像都是以当前状态为起点的,能设置任意两个点之间的动画吗?
可能评论的 有点太晚了 不过雨凇大神 有一个问题 怎么在domove过程中对东西进行修改位置 类似 itween iTween.MoveTo(obj, iTween.Hash(“isLocal”,***,); 这种 往过目!~
跪求翻墙软件。。。[泪]
我用的是astrill
哎,已被封了
OnComplete怎么传递参数
无意中又来到这里。问的问题还没有回复,我说你知道就告诉下,不知道也回复下。。。这个问题很幼稚么???
反正国内没搜到。
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))
dotween的作者http://forum.unity3d.com/threads/dotween-hotween-v2-a-unity-tween-engine.260692/
抱歉了, 那段时间可能太忙,没看到留言。
可以取消 一个dotween 吗 怎么取消 求教啊 大大
我记得有close方法。。
doTween 在IOS设备上的表现相对于Android设备有些卡顿,请问这是什么原因?
我也遇到相同的问题了,请问你是怎么解决的。
雨松大大你好,最近遇到了一些问题,就是跟DOTween有关。您这里给出了单个动画的忽略Unity的timeScale的解决方法,不知道您是否研究过有没有全局的动画的忽略方法?去看了他们的api,觉得DOTween.defaultTimeScaleIndependent和DOTween.timeScale可能是我想要的东西,但经过实际实验后似乎没用(我哪里写错了么?)然后我根据setUpdate(true)这个方法中实际所指的属性independentUpdate来去索引整篇文档,并没有找到其余设置,因此希望在您这里获得帮助,不知你是否研究过呢?
抱歉,我的错,我设置了一组动画之间的延迟间隔,然后忘记了这件事儿,DOTween.defaultTimeScaleIndependent = true就可以轻松实现忽略Unity缩放比,仅限于在该脚本所挂载的游戏物体上。
你好,设置这个有用吗?DOTween.defaultTimeScaleIndependent = true 能解决切入后台问题吗?方便的话加我QQ:1357098586
松哥 DOTween详细文档在哪里呢?
都在他的官网上, 有点慢,应该要翻墙吧。
谢谢松哥 我去爬墙了
MO大 请问有没有在两个PATH节点之间设置旋转量的方法我目前使用iTweenPath绘制节点,并放进DoTween中跑因为旋转及分段速度的需求,对iTweenPath、iTweenPathEditor做了点扩充旋转部分主要新增了一个rotation阵列,也就是每个path节点除了position值还有rotation值但是目前看DoTween旋转的部份,只能做一段时间之间的旋转,没有管道附加在DOPath的方法上考虑过使用在每个节点使用OnWayPointChange(),用DORotate(目标角度,时间)设置两点之间的旋转量,但是因为无法得知两个path节点之间的经过时间所以无法实现也考虑过新增另一个使用DoTween的参考点,并用lookat的方式对准那个参考点,来实现而这算是一个好方法,对于一些状况也有优点,但是致命缺点就是给编辑者操作起来不够简便,并且有点混乱DoTween不是一个开源插件无法自行扩充或参考代码,想请问MO大,有没有其它方法可以实现
MO大我再补充一下 还考虑过一个方式如果不使用DOPath 而是把每两个节点拿出来做DOMove(目标座标,时间),就可以用DORotate(目标角度,时间) 添加相同的时间量实现每段位移都附加旋转的功能但是也有一个问题就是使用这个方法每段位移都只能是一段直线无法像DOPath()一样拥有经过计算后的平滑曲线移动
你这种特殊的需求, 我觉得不如考虑 自己来写 不用tween插件。 dotween最大的问题就是没有开源。 不能改源码。。
雨松大大,我用的DOPath的这个TWeen动画不能通过调用mytween.Pause();这种方式暂停,为什么呢?但是我用极端的DOTween.PauseAll();就可以了。
不没有这样面的插件,帮我们处理这种碰撞事件
应该没有吧。 我没见过。
MOMO大神,对于弄3D捕鱼(就像捕鱼大人3)的路径方面,我想请教下我要用什么插件。我本来用Itween,但是在3D水中,会有深度,鱼可能会出现穿透。这样就要处理,路径就要变化,会繁琐。请问有没有好的神思路来解决这个问题。
我觉得应该是自己写的路径。
主要是,模型穿透这不知道怎么解决。比如两条深度一样长的鱼游到一起,这要怎么解决,模型重叠。momo大神有什么思路吗(个人:碰撞到检测,在重新分配路线。但是路径上会有很深度相同的鱼,这中操作会很频繁。)
momo 大神 ,我处理鱼叠加穿透的思路是:渲染先后来弄得。但是我现在的知识面让我只想到用shader中的渲染队列来控制渲染层级。这样会出现,我要对render.material的 renderQueue进行修改,这样就会造成内存重新new出一份来,过多会出现内存溢出。请问你怎么处理渲染顺序?
momo 大神 ,我处理鱼叠加穿透的思路是:渲染先后来弄得。但是我现在的知识面让我只想到用shader中的渲染队列来控制渲染层级。这样会出现,我要对render.material的 renderQueue进行修改,这样就会造成内存重新new出一份来,过多会出现内存溢出。请问你怎么处理渲染顺序?
路径,你是怎么弄得?
雨松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 是 会停顿呢,有什么方法不两个动画 不停顿吗?
可能是中间停顿是因为隔了一帧
Ctrl R 消失,Ctrl S显示。
在5.1下,导入DOTween Pro v0.9.290 后,文本文字会消失,或变乱,暂时只在编辑下会这样,运行后不会不会有别的问题就不知道了。
抱歉 我也没用DOTween Pro 只是在用tween 编辑的话是自己写的工具。。
最新的DOTween也是会出现文本消失问题。。。看来还是自己写个简单的算了。。
没遇到啊 我也是新的dotween + unity5.1 都是新版本 挺正常啊。。
Ctrl+R 消失,Ctrl+S显示。
因为material.DOFade(0,1f),你material.DOFade(1,1f),他就回来了
没懂,我是在编辑器上就这样了,不是在运行时的。
没遇到啊 我也是新的dotween unity5.1 都是新版本 挺正常啊。。
雨松MOMO,你好,我想问一下DOpath的用法,里面的具体参数是什么意思。。。
this.transform.DOPath(postion,time,PathType.CatmullRom,PathMode.Full3D).SetEase(MyEaseFunction).OnComplete(Complete);
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都添加动画呢?
什么意思呢?
DOTween.To(() => img.color, x => img.color = x, new Color(1, 1, 1, 0), scaleDuration/10).SetOptions(true);我想用这个方法,给多个UI对象添加颜色渐变动画,行不通。结果发现,MaskableGraphic类自带了渐变函数。解决了,谢谢