unity动画插件Hotween的使用 – unity3d游戏开发
2013-08-26 10:07
781 查看
Hotween与itween类似,也是一个插值插件,都是对位移,缩放,旋转,颜色等数值进行插值,各有各的优势。如果做一般常见的动画建议使用Hotween,但是遗憾的是Hotween不支持路径动画,如果支持就完美了。
官方网站:http://www.holoville.com/hotween/index.html
根据Hotween官方网站介绍,hotween是运行快,类型安全和面向对象的unity插件,兼容unity所有的脚本语言,并且在官方网站上有和unity对比的demo(http://www.holoville.com/hotween/testRun.html),一般情况下两者性能上的对比不是太明显,但是当游戏对象多的时候hotween的优势就显现出来了.
这也是我选择hotween的原因,下面介绍hotween在unity中的使用.
一、安装
首先去http://www.holoville.com/hotween/download.html下载hotween插件,然后把hotween解压到Assets/Plugins目录下(Plugins文件夹需要自己创建),节点结构大致是这样子的
;
开始编写代码使用.
首先要在类前面引用hotween的命名空间
二、Hotween的基本使用方法
ok,引入完毕,然后在第一个例子中我会使用Transform对象,但是要记住一点的是hotween只能对物体的任何非静态的公有属性或者字段做动画.
Example1:
当然大多数情况下,我们做插值动画这些参数控制是远远不够的,那就需要添加更多的控制参数,
Example2:
代码看起来很长,不是很好理解,那我们换一种方式:
这两种写法的动画效果是一模一样的,其中loops方法我觉得是做的比较好的,可以设置循环次数,itween是没有的
三、HOTween Sequence 动画队列
有时候我们需要播放一系列的动画,比如说:移动到远点–>旋转180–>放大2倍。。。
这时候就可以考虑使用hotween的队列动画.
四、回调函数 Call back
不带参数的回调可以这样写:
需要带一个或者多个参数的回调函数:
五、以speed为计量单位
一般我们使用Hotween开始一个动画,第二个参数是p_duration表示是时长,好想也没有找到如何根据速度来控制动画。 最近必须要用到speed,就找了一下,发现可以这样用:
当在代码中设置SpeedBased为true之后,第二个参数就以速度来表示了,值越大自然运动的越快
官方网站:http://www.holoville.com/hotween/index.html
根据Hotween官方网站介绍,hotween是运行快,类型安全和面向对象的unity插件,兼容unity所有的脚本语言,并且在官方网站上有和unity对比的demo(http://www.holoville.com/hotween/testRun.html),一般情况下两者性能上的对比不是太明显,但是当游戏对象多的时候hotween的优势就显现出来了.
这也是我选择hotween的原因,下面介绍hotween在unity中的使用.
一、安装
首先去http://www.holoville.com/hotween/download.html下载hotween插件,然后把hotween解压到Assets/Plugins目录下(Plugins文件夹需要自己创建),节点结构大致是这样子的
;
开始编写代码使用.
首先要在类前面引用hotween的命名空间
1 | using UnityEngine; |
2 | using System.Collections; |
3 | using Holoville.HOTween; |
4 | public class HotweenTest : MonoBehaviour { |
5 | // Use this for initialization |
6 | void Start () { |
7 | } |
8 | } |
ok,引入完毕,然后在第一个例子中我会使用Transform对象,但是要记住一点的是hotween只能对物体的任何非静态的公有属性或者字段做动画.
Example1:
1 | /* |
2 | //Parame1:要做动画的类,这里我们选择当前物体的变换组件Transform |
3 | //Parame2:动画运行时长 |
4 | //Parame3:参数一的position属性,记住这第三个参数是第一个参数的属性 |
5 | //Parame4:属性要达到的值,也就是动画做完之后物体的最终坐标 |
6 | */ |
7 | HOTween.To(gameObject.transform,1, "position" , new Vector3(10,20,30)); |
Example2:
1 | HOTween.To(transform,2, new TweenParms().Prop( "position" , new Vector3(10,20,30)).Prop( "rotation" , new Vector3(0,720,0)).Prop( "localScale" , new Vector3(10,10,10)).Ease(EaseType.EaseInBack).Loops(3,LoopType.Yoyo).Delay(1)); |
1 | TweenParms parms = new TweenParms(); |
2 | parms.Prop( "position" , new Vector3(10,20,30)); //坐标 |
3 | parms.Prop( "rotation" , new Vector3(0,720,0)); //旋转 |
4 | parms.Prop( "localScale" , new Vector3(10,10,10)); //缩放 |
5 | parms.Ease(EaseType.EaseInBack); //加速度类型 |
6 | parms.Loops(3,LoopType.Yoyo); //设置循环类型为往复循环 |
7 | parms.Delay(1); //延迟时间 |
8 | HOTween.To(myGameObject.transform,2,parms ); |
三、HOTween Sequence 动画队列
有时候我们需要播放一系列的动画,比如说:移动到远点–>旋转180–>放大2倍。。。
这时候就可以考虑使用hotween的队列动画.
01 | Sequence mySequence = new Sequence( new SequenceParms().Loops(3,LoopType.Yoyo)); |
02 |
03 | //在队列后追加动画 |
04 | mySequence.Append(HOTween.To(myGameObject1.transform,1, new TweenParms().Prop( "position" , new Vector3(0,0,0)).Ease(EaseType.EaseOutBounce))); |
05 |
06 | //在队列最前插入 |
07 | mySequence.Prepend(HOTween.To(myGameObject2.transform,1, new TweenParms().Prop( "position" , new Vector3(10,20,30)).Prop( "rotation" , new Vector3(0,720,0)).Prop( "localScale" , new Vector3(4,4,4)).Ease(EaseType.EaseInElastic))); |
08 |
09 | //在1秒后往队列中插入 |
10 | mySequence.Insert(1,HOTween.To(myGameObject3.transform,1, new TweenParms().Prop( "position" , new Vector3(10,20,30)).Prop( "rotation" , new Vector3(0,720,0)).Prop( "localScale" , new Vector3(4,4,4)).Ease(EaseType.EaseOutQuad))); |
11 |
12 | //三种播放方式 |
13 | mySequence.play(); //播放或者继续播放(暂停后) |
14 | mySequence.PlayForward(); //队列中从头往尾播放 |
15 | mySequence.PlayBackwards(); //队列中从尾往头播放 |
不带参数的回调可以这样写:
1 | HOTween.To(transform,1, new TweenParms().Prop( "position" , new Vector3(10,20,30)).OnComplete(completeCallBack())); |
2 |
3 | private void completeCallBack() { |
4 | // Your code here |
5 | } |
1 | HOTween.To(transform,1, new TweenParms().Prop( "position" , new Vector3(10,20,30)).OnComplete(completeCallBack,350,Vector3.one)); |
2 |
3 | private void completeCallBack(TweenEvent e) { |
4 | Debug.Log(e.parms[0]); //第一个参数 |
5 | Debug.Log(e.parms[1]); //第二个参数 |
6 | Debug.Log(e.tween); //可以得到动画的所有信息 |
7 | } |
一般我们使用Hotween开始一个动画,第二个参数是p_duration表示是时长,好想也没有找到如何根据速度来控制动画。 最近必须要用到speed,就找了一下,发现可以这样用:
1 | TweenParms parms = new TweenParms(); |
2 | parms.Prop( "position" , new Vector3(100,200,50)); |
3 | parms.SpeedBased( true ); |
4 |
5 | HOTween.To(FurnacePanel,5,parms); |
相关文章推荐
- Unity使用Hotween动画插件遇到的坑
- Unity3D游戏开发之使用Mecanim动画系统控制2D动画
- VR开发——Unity中导入常用的VR开发插件及简单使用
- Unity 动画插件 DOTween 的简单使用
- 【Unity 3D】使用 2DToolkit 插件 制作2D精灵动画
- Unity3D游戏开发之使用SVN对Unity进行版本控制
- Unity3D游戏开发之使用Unity3D开发2D游戏(二)(2DTookit插件亲测)
- 【Unity 3D 游戏引擎】使用 2DToolkit 插件 制作2D精灵动画
- 使用unity插件vuforia进行AR开发
- Unity 开发总结之VLC Player for Unity插件的使用
- Unity3D游戏开发之使用插件完成游戏小地图制作
- unity中使用box2d物理引擎一 – unity3d游戏开发
- Unity3D游戏开发之使用Unity3D开发2D游戏(二)(2DTookit插件亲测)
- Unity3D游戏开发之MMD For Unity插件研究
- Unity3D游戏开发之使用Unity3D开发2D游戏(二)(2DTookit插件亲测)
- unity开发android插件(unity调用android代码) – unity3d游戏开发
- unityios开发--FingerGestures插件使用
- Unity3D游戏开发之使用Mecanim动画系统控制2D动画
- IDEA插件开发初体验之(GET/SET自动生成带模版注释插件的开发与使用)
- 关于unity3d播放flash动画,使用插件uniswf