笨木头  2017-08-05 11:03     Unity3D     阅读(22957)     评论(8)
转载请注明,原文地址: http://www.benmutou.com/archives/2410
文章来源:笨木头与游戏开发
 
转载请注明,原文地址:http://www.benmutou.com/archives/2410 文章来源:笨木头与游戏开发
 

在游戏开发里,补间动画是不可少的,像简单的向前移动、上下重复飘动、按照预设路径移动等。这些功能要是都自己写的话,游戏得开发到何年何月,所以我们必须要用现成的工具。

 

1.iTween

我们最常听到的应该就是iTween了吧,反正我到网上一搜,最先看到的就是它。

它确实很好用,官方文档很详细,很整洁,功能也挺全的。

然而,这是在我发现DOTween之前的事情。

 

2.DOTween

就在前天,我偶然发现了DOTween(以前叫做HoTween),怎么说呢,那真的是相逢见晚(旁白:是恨晚!恨晚!)。

 

DOTween的官方文档咋一看,感觉年代十分久远,没有iTween那么高大上。

但是,硬着头皮看了之后,我如获至宝。

 

举个例子吧,

iTween要移动某个物体,需要这么做:

iTween.MoveTo(gameObj, new Vector(2, 3, 2), 0.4f);

 

而DOTween要移动某个物体,只需要这么做:

gameObject.transform.DOMove(new Vector3(2, 3, 2), 0.4f );

 

怎么样,是不是DOTween要简单多了...啊个屁啊!完全没区别好吗,不就是静态函数和扩展函数的区别吗,哪里简单多了。

咳咳,是的,如果仅仅是要移动某个物体的话,确实没有什么太大的区别。

 

但是....

 

3. 复杂的调用方式

如果我想以恒定的速度移动到某个地方,并且要指定移动方式、移动完成时要回调函数。 那么,iTween需要这样做:
        iTween.MoveTo(gameObject, iTween.Hash(
            "position", valueTo, 
            "speed", Speed, 
            "easetype", iTween.EaseType.linear,
            "oncomplete", "ArriveAim"
            )
        );
是的,我得记住一堆字符串参数,虽然我记性不差,但是...我刚刚说到哪来着?

哦,对,虽然我记性不差,但是要记住这些参数还是很讨厌的好吗?

 

再来看看DOTween是怎么做的:
        gameObject.transform
            .DOMove(valueTo, Speed)
            .SetSpeedBased()
            .SetEase(Ease.Linear)
            .OnComplete(ArriveAim);
我的天啊,这样写代码才是享受啊,我只需要大概记住某个函数的名字就行了,编辑器会提示我有哪些函数可以用,一瞬间就找到了,根本不需要记住它们。

而且,我还能直接一个个函数看注释,等于在看文档,很方便的好吗。

 

这两天我就在干一件事情,把我目前在开发的游戏的所有iTween替换成DOTween,然后把iTween彻底删掉,再也不用它。

我相信,同为开发者的你,一定更愿意使用DOTween这种调用方式。

而且它的官方文档并没有看起来的那么挫,习惯之后,就会觉得很不错,而且远比iTween的要好。

附上地址:http://dotween.demigiant.com(当然你直接百度DOTween也可以)

 

4.DOTween的坑

当然,DOTween也有一个小坑。

比如这样的一个功能:角色自动向前移动,遇到进入攻击范围的敌人就停下来,开始攻击。同时,角色会不停上下飘动,不管是不是在移动。

这就有两个需求,上下飘动以及向前移动。上下飘动用DOTween即可实现,向前移动,我还是比较倾向于在Update里修改角色x坐标,这样控制起来比较灵活。

 

然而,使用DOTween对物体进行上下飘动(MoveTo函数)的过程中,我无法对其修改x坐标(会无效)。

本以为这是DOTween的缺陷,我差点就用iTween来实现这些特殊的地方了。

幸好,我继续研究了官方文档,发现了一个神奇的函数:DOBlendableMoveBy

使用DOBlendableMoveBy移动物体的时候,允许同时存在多个DOBlendableMoveBy调用,相互之间不会覆盖,也不会冲突。

 

我想,这个就是和iTween的机制一样的东西了,使用这个函数执行动画时,我依旧可以主动去修改物体的坐标,相互之间不会冲突。于是,我的需求完美解决了,DOTween也将成为我未来很长一段时间都会依赖的工具。

 

5.其他的更好的东西?

如果你还知道比DOTween更好用的工具,请一定要告诉我,对于厉害的工具,我真的完全没有抵抗力。

一定要和我分享。
8 条评论
  • 夨翼 2019-04-11 19:02:27

    做几个空物体,让摄像机沿着空物体移动,其中让摄像机看向路径的方向移动 用DOTween代码怎么写呀?用面板是能实现,但是我不想用面板,有啥办法不?
    0回复
    • 博主 笨木头 2019-04-12 07:58:40

      唔,我没做过,你是不是想做类似引导时自动往某个地方走的功能?
      DOTween有个按路径走的功能,你试试?

      (另外,你说的面板...其实我不懂,我纯业余选手)
      0回复
  • 好奇的狗 2019-03-10 15:22:57

    请问 素材这些也是自己创作的吗
    0回复
    • 博主 笨木头 2019-03-10 18:03:10

      那个,你问的是?是不是评论错文章了?
      0回复
  • 攻性防壁 2018-07-02 16:22:09

    好奇地问下,这两个插件都可以变速运动吗?
    0回复
    • 博主 笨木头 2018-07-03 09:35:59

      变速我没用过,但我不确定有没有,最好看看官方文档,这两个的文档都很全
      0回复
  • 马三小伙儿 2017-11-17 22:33:47

    DoTween确实要比iTween好用很多。iTween主要胜在够简洁,就一个iTween.cs文件。蛤蛤
    0回复
    • 博主 笨木头 2017-11-18 11:39:44

      哈哈哈,好用的话,多几个文件都没关系
      0回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发