HOTween 简单应用

HOTween简单应用

shubozhang 2014/12/22

[email protected]

1 基本插值

说明:

HOTween 只能对物体的任何非静态共有属性或者字段做插值

TweenParms.Prop(propName,endValue) 设定被插值的属性和最后的值(可以多次调用指定多个被插值的属性)

TweenParms.Ease(easeType) 指定渐变类型,这里使用Linear表示线性渐变

HOTween.To(object,time,params) To表示从现在的值经过插值后变换到endValue,time表示整个变换进行的时间,params定义了其他参数

(HOTween.From(object,time,params) 把To改用From表示从被指定的endValue经过变换后,成为当前的值)

代码:

void Start ()

{

TweenParms params = new TweenParms();

parms.Prop("postion", new Vector3(2.0f,0.0f,0.0f)); //坐标

parms.Ease(EaseType.Linear); //加速度类型

HOTween.To(gameObject.transform, 2, params);

}

效果:

绑定到该游戏的对象从原来的位置经过两秒移动到了位置(2.0f,0.0f,0.0f) 最后停止在(2.0f,0.0f,0.0f)

移动的速度为匀速,改变移动的速度可以选用其他的渐变类型

其他可选的渐变类型包括:

EaseInSine = 1,EaseOutSine = 2,EaseInOutSine = 3,

EaseInQuad = 4,EaseOutQuad = 5,EaseInOutQuad = 6,

EaseInCubic = 7,EaseOutCubic = 8,EaseInOutCubic = 9,

EaseInQuart = 10,EaseOutQuart = 11,EaseInOutQuart = 12,

EaseInQuint = 13,EaseOutQuint = 14,EaseInOutQuint = 15,

EaseInExpo = 16,EaseOutExpo = 17,EaseInOutExpo = 18,

EaseInCirc = 19,EaseOutCirc = 20,EaseInOutCirc = 21,

EaseInElastic = 22,EaseOutElastic = 23,EaseInOutElastic = 24,

EaseInBack = 25,EaseOutBack = 26,EaseInOutBack = 27,

EaseInBounce = 28,EaseOutBounce = 29,EaseInOutBounce = 30,

AnimationCurve = 31

2 使用自定义的曲线关键点进行插值

代码:

void Start ()

{

Vector3[] points = new Vector3[2];

points[0] = new Vector3(2.0f, 0.0f, 0.0f);

points[1] = new Vector3(2.0f, 1.0f, 0.0f);

TweenParms parms = new TweenParms();

parms.Prop("position", new PlugVector3Path(points,PathType.Linear)); //坐标

parms.Ease(EaseType.Linear); //加速度类型

HOTween.To(gameObject.transform, 2, parms);

}

效果:

游戏对象先移动到了(2.0f, 0.0f, 0.0f)然后立即移动到了(2.0f, 1.0f, 0.0f)一共花了两秒

3 将插值的动画进行连续播放

void Start ()

{

Sequence seq = new Sequence(new SequenceParms().Loops(1,LoopType.Yoyo));

TweenParms parms = null;

parms = new TweenParms()

.Prop("position",new Vector3(1.0f,0.0f,0.0f))

.Ease(EaseType.Linear);

seq.Append(HOTween.To(gameObject.transform,1,parms));

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 1.0f, 0.0f))

.Ease(EaseType.Linear);

seq.Append(HOTween.To(gameObject.transform, 1, parms));

seq.Play();

}

4 在动画结束时进行方法回调

代码:没有参数的

void Start ()

{

TweenParms parms = null;

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 0.0f, 0.0f))

.OnComplete(OnComplete);

HOTween.To(gameObject.transform, 1, parms);

}

private void OnComplete()

{

Debug.Log("OnComplete Called!");

}

代码:有参数的

void Start ()

{

TweenParms parms = null;

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 0.0f, 0.0f))

.OnComplete(OnComplete, 50, Vector3.one);

HOTween.To(gameObject.transform, 1, parms);

}

private void OnComplete(TweenEvent e)

{

Debug.Log(e.parms[0]);//第一个参数

Debug.Log(e.parms[1]);//第二个参数

}

5 Loops方法

TweenParms.Loops(times,loopType)

通过该方法可以指定一次插值动画的循环属性

包括以下几种loopType

public enum LoopType

{

Restart = 0,Yoyo = 1,YoyoInverse = 2,Incremental = 3,

}

Restart代码:

void Start ()

{

TweenParms parms = null;

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 0.0f, 0.0f))

.Loops(2, LoopType.Restart);

HOTween.To(gameObject.transform, 1, parms);

}

效果:一共播放动画两次,第一次对象从起点运动到了(1.0f, 0.0f, 0.0f),

然后瞬间移动到原点播放第二次动画,效果和第二次相同,最后物体停止在(1.0f, 0.0f, 0.0f)。

Yoyo 代码:

void Start ()

{

TweenParms parms = null;

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 0.0f, 0.0f))

.Loops(2, LoopType.Yoyo);

HOTween.To(gameObject.transform, 1, parms);

}

效果:一共播放动画两次,第一次对象从起点运动到了(1.0f, 0.0f, 0.0f),

然后开始播放第二次动画,从(1.0f, 0.0f, 0.0f)运动到原点,最后停止在原点。

YoyoInverse代码:

void Start ()

{

TweenParms parms = null;

parms = new TweenParms()

.Prop("position", new Vector3(1.0f, 0.0f, 0.0f))

.Loops(2, LoopType.YoyoInverse);

HOTween.To(gameObject.transform, 1, parms);

}

效果:和Yoyo运动的方式相同先运动到(1.0f, 0.0f, 0.0f)在运动回原点,

但是,Yoyo对EaseType不产生影响,YoyoInverse还会对EaseType产生相反的影响。

6 处理对静态变量的插值

有时一些静态变量也需要插值操作,但是HOTween不能直接对其进行操作,所以需要做一个代理,这里使用Time.timeScale进行举例。

代码:

class TimeScaleTweenProxy

{

public float Value

{

get

{

return Time.timeScale;

}

set

{

Time.timeScale = value;

}

}

}

void Start ()

{

TimeScaleTweenProxy proxy = new TimeScaleTweenProxy();

TweenParms parms = null;

parms = new TweenParms()

.Prop("Value", 0.4)

.Ease(EaseType.EaseOutCubic)

HOTween.To(proxy, duration, parms);

}

7 其他: delay方法,多次设置prop,from的使用

使用Delay动画将被延时播放

void Start ()

{

TweenParms params = new TweenParms();

parms.Prop("postion", new Vector3(2.0f,0.0f,0.0f)); //坐标

parms.Ease(EaseType.Linear); //加速度类型

parms.Delay(1.0f);

HOTween.To(gameObject.transform, 2, params);

}

可以设置多个prop同时进行插值

void Start ()

{

TweenParms params = new TweenParms();

parms.Prop("postion", new Vector3(2.0f,0.0f,0.0f)); //坐标

parms.Prop("rotation", new Vector3(0.0f,180.0ff,0.0f));

parms.Ease(EaseType.Linear); //加速度类型

HOTween.From(gameObject.transform, 2, params);

}

使用From播放动画运动路径是和To相反的

void Start ()

{

TweenParms params = new TweenParms();

parms.Prop("postion", new Vector3(2.0f,0.0f,0.0f)); //坐标

parms.Ease(EaseType.Linear); //加速度类型

HOTween.From(gameObject.transform, 2, params);

}

时间: 2024-10-11 23:44:05

HOTween 简单应用的相关文章

unity Dotween插件的简单介绍及示例代码

unity里面做插值动画的插件有许多,比较常见的有itween.hotween.dotween.根据大家的反馈和实际体验来说,dotween插件在灵活性.稳定性.易用性上都十分突出.这里简单介绍下它的用法,并在后文做了一些效果示例,还是不错的. 所谓"插值动画",顾名思义就是在两个值中插入其他的值来实现动画.原理非常简单,比如想让某个物体从A地到达B地,我们只知道A和B的坐标,插值动画就可以根据"缓动函数"确定A.B间的其他值,来实现物体从A到B的"运动过

C# Ping 简单使用

编程过程中,有时候需要判断主机是否在线,最简单的方法就是使用Windows的Ping命令看看能否ping通.看到网上很多文章,说用C#去调用windows的ping.exe,然后解析返回的字符串.我觉得这种方式太麻烦了,就做一下简单判断,不想弄那么麻烦. 查了一下,C#专门提供了一个Ping类,与Windows下的ping命令类似: 命令空间: System.Net.NetworkInformation; 使用方法: bool online = false; //是否在线 Ping ping =

自动生成简单四则运算的C语言程序

该程序是在博客园里面找的,具体是谁的找了半天没找到,无法提供它原本的链接.由于自己写的过于简单,且有一些功能暂时无法实现,所以就找了一个来应付作业,望原谅.在这个程序的源码中我改了一个错误的地方,源码中有这样一个随机数发生器的初始化函数的语句:"srand((unsigned)time(NULL))".srand函数是随机数发生器的初始化函数.但是正确的写法应该是:srand(unsigned( time(NULL))):为了防止随机数每次重复,常常使用系统时间来初始化,即使用time

Mysql的锁机制与PHP文件锁处理高并发简单思路

以购买商品举例: ① 从数据库获取库存的数量. ② 检查一下库存的数量是否充足. ③ 库存的数量减去买家购买的数量(以每个用户购买一个为例). ④ 最后完成购买. 仅仅这几行逻辑代码在并发的情况下会出现问题,自己可以想象一下. 这里暂时就不测试了,下面会针对并发的处理给出测试结果. 创建表: CREATE TABLE `warehouse` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'id', `stock` int(11) NOT NULL

Winfrom 简单的安卓手机屏幕获取和安卓简单操作

为啥我要做这个东西了,是因为经常要用投影演示app ,现在有很多这样的软件可以把手机界面投到电脑上 ,但都要安装,比如说360的手机助手,我又讨厌安装,于是就自己捣鼓了下 做了这个东西, 实现了以下简单功能   1.屏幕获取(因为是截图方式获取的,所以有点卡顿) 2.实现点击功能,并在点击的时候出现一个手势图标,方便用户观看 3.实现简单的滑动功能 4.实现在界面上画图功能 5.实现拖拽安装apk功能 操作说明:鼠标左边 模拟手机点击,中键停止/开始刷新界面(画图的时候不能刷新),右键去掉画图内

iOS instruments之ui automation的简单使用(高手绕道)

最近使用了几次instruments中的automation工具,现记录下automation的简单使用方法,希望对没接触过自动化测试又有需求的人有所帮助.  UI 自动测试是iOS 中重要的附加功能,它由名为"Automation"的新的工具对象支持.Automation工具的脚本是用JavaScript语言编写,主要用于分析应用的性能和用户行为,模仿/击发被请求的事件,利用它可以完成对被测应用的简单的UI测试及相关功能测试. 一. 简单的录制脚本 打开xcode,这里用我为我家亲爱

Android ExpandableListView 带有Checkbox的简单应用

expandablelistview2_groups.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height=&qu

Android ExpandableListView的简单应用

Expandablelistview1Activity.java package com.wangzhu.demoexpandablelistview; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widg

一个简单的主机管理模拟程序

最近写的一个小练习,主要是把前面学的东西整合一下.写了一个简单的主机管理界面,主要是练习以下知识点: Session和Cookie进行登录验证(装饰器) 数据库的基本操作 (单表,1对多,多对多) Form的简单使用实现验证 Bootstrap模板写个简单界面 自定义分页 信号,中间件,CSRF,模板语言,JavaScript,AJAX等等 界面比较low,毕竟不是专业的. 附件里面是Django的源代码,3个文件放在一起winrar解压就可以打开