重写Tween动画组件
来源:互联网 发布:迅龙数据恢复软件 mac 编辑:程序博客网 时间:2024/05/29 19:41
tween 动画源于一系列的数学公式 。今天仔细的介绍他们 如何通过数学公式一步步的封装出 tween 动画 。以及对NGUI的 Tween 进行重写 。
参考文章 : http://www.manew.com/forum.php?mod=viewthread&tid=40974
关于如何 自己写一个动画 上面的翻译已经有了十分详细的解释 。就不再造车了。
下面记录一下 在NGUI中 重写Tween 的效果。
先新建一个脚本 TweenPositionAndScale.cs
将 TweenPosition的内容直接复制到 里面:
public class TweenPositionAndScale : UITweener{ public Vector3 from; public Vector3 to; [HideInInspector] public bool worldSpace = false; Transform mTrans; UIRect mRect; public Transform cachedTransform { get { if (mTrans == null) mTrans = transform; return mTrans; } } [System.Obsolete("Use 'value' instead")] public Vector3 position { get { return this.value; } set { this.value = value; } } /// <summary> /// Tween's current value. /// </summary> public Vector3 value { get { return worldSpace ? cachedTransform.position : cachedTransform.localPosition; } set { if (mRect == null || !mRect.isAnchored || worldSpace) { if (worldSpace) cachedTransform.position = value; else cachedTransform.localPosition = value; } else { value -= cachedTransform.localPosition; NGUIMath.MoveRect(mRect, value.x, value.y); } } } void Awake() { mRect = GetComponent<UIRect>(); } /// <summary> /// Tween the value. /// </summary> protected override void OnUpdate(float factor, bool isFinished) { value = from * (1f - factor) + to * factor; } /// <summary> /// Start the tweening operation. /// </summary> static public TweenPosition Begin(GameObject go, float duration, Vector3 pos) { TweenPosition comp = UITweener.Begin<TweenPosition>(go, duration); comp.from = comp.value; comp.to = pos; if (duration <= 0f) { comp.Sample(1f, true); comp.enabled = false; } return comp; } /// <summary> /// Start the tweening operation. /// </summary> static public TweenPosition Begin(GameObject go, float duration, Vector3 pos, bool worldSpace) { TweenPosition comp = UITweener.Begin<TweenPosition>(go, duration); comp.worldSpace = worldSpace; comp.from = comp.value; comp.to = pos; if (duration <= 0f) { comp.Sample(1f, true); comp.enabled = false; } return comp; } [ContextMenu("Set 'From' to current value")] public override void SetStartToCurrentValue() { from = value; } [ContextMenu("Set 'To' to current value")] public override void SetEndToCurrentValue() { to = value; } [ContextMenu("Assume value of 'From'")] void SetCurrentValueToStart() { value = from; } [ContextMenu("Assume value of 'To'")] void SetCurrentValueToEnd() { value = to; }}
观察代码可一发现 改变transform的 位置值是在 Value 里面。 而 Value的值的改变 是在 OnUpdate(float factor, bool isFinished) 里面。 如果看了上面连接的博客就知道这个值是有渐变函数公式计算的出的一个值,直接将他应用 到Scale上 ,参考 TweenScale 加上这些变量
public Vector3 fromScale;public Vector3 toScale;public bool updateTable = false;UITable mTable;/// <summary>/// Tween Scale Value/// </summary>public Vector3 valueScale { get { return cachedTransform.localScale; } set { cachedTransform.localScale = value; } }
在Onupdate里来改变 他的值,加上:
valueScale = fromScale * (1f - factor) + toScale * factor; if (updateTable) { if (mTable == null) { mTable = NGUITools.FindInParents<UITable>(gameObject); if (mTable == null) { updateTable = false; return; } } mTable.repositionNow = true; }
Ok
0 0
- 重写Tween动画组件
- Tween动画
- Tween动画
- tween动画
- tween动画
- Tween 动画
- Tween动画
- Android:动画:tween动画
- android 动画 -- tween动画
- Tween动画介绍
- android tween、frame动画
- android tween动画
- Android Tween动画
- Tween动画java
- Tween动画xml
- Android---Tween动画
- 补间(Tween)动画
- tween动画Mark
- 第五届蓝桥杯试题——斐波那契
- 蓝桥杯学习记录:Excel地址转换问题(进制转换)
- redis体系结构
- ajax与json的学习总结
- 6.5 fractions--有理数运算
- 重写Tween动画组件
- Struts2与Hibernate的整合实例_1
- eclipse 自动展开源文件的位置
- oracle访问数据
- 在VS2015中用C++编写可被其它语言调用的动态库DLL
- Android Studio如何快速生成get,set,tostring,构造函数
- Python Matplotlib 中文乱码
- 写出一个能创建多级目录的PHP函数(腾讯)
- 独立性课程笔记