NGUI中我们要同时完成Scale与Transform的效果,会发现动画并不是同我们想的那样运行的。

原因就是Tween Scale与Tween Transform的冲突调用。

Tween Scale中

用来设置localScale

Tween Transform中

也用来设置localScale。

这就产生冲突了。。。这里最简单的方法就是把两个脚本合并一下删掉Tween Transform中的localScale,因为还是得用Tween Scale来控制Scale。

  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class TweenScaleTransform : UITweener
  5. {
  6.  
  7. public Vector3 from = Vector3.one;
  8. public Vector3 to = Vector3.one;
  9. public bool updateTable = false;
  10. public Transform fromt;
  11. public Transform tot;
  12. public bool parentWhenFinished = false;
  13.  
  14. Transform mTrans;
  15. Vector3 mPos;
  16. Quaternion mRot;
  17. Vector3 mScale;
  18.  
  19. UITable mTable;
  20.  
  21. public Transform cachedTransform { get { if (mTrans == null) mTrans = transform; return mTrans; } }
  22.  
  23. public Vector3 value { get { return cachedTransform.localScale; } set { cachedTransform.localScale = value; } }
  24.  
  25. [System.Obsolete("Use 'value' instead")]
  26. public Vector3 scale { get { return this.value; } set { this.value = value; } }
  27.  
  28. /// <summary>
  29. /// Tween the value.
  30. /// </summary>
  31.  
  32. protected override void OnUpdate(float factor, bool isFinished)
  33. {
  34. value = from * (1f - factor) + to * factor;
  35.  
  36. if (updateTable)
  37. {
  38. if (mTable == null)
  39. {
  40. mTable = NGUITools.FindInParents<UITable>(gameObject);
  41. if (mTable == null) { updateTable = false; return; }
  42. }
  43. mTable.repositionNow = true;
  44. }
  45.  
  46. if (tot != null)
  47. {
  48. if (mTrans == null)
  49. {
  50. mTrans = transform;
  51. mPos = mTrans.position;
  52. mRot = mTrans.rotation;
  53. mScale = mTrans.localScale;
  54. }
  55.  
  56. if (fromt != null)
  57. {
  58. mTrans.position = fromt.position * (1f - factor) + tot.position * factor;
  59. mTrans.rotation = Quaternion.Slerp(fromt.rotation, tot.rotation, factor);
  60. }
  61. else
  62. {
  63. mTrans.position = mPos * (1f - factor) + tot.position * factor;
  64. mTrans.rotation = Quaternion.Slerp(mRot, tot.rotation, factor);
  65. }
  66.  
  67. // Change the parent when finished, if requested
  68. if (parentWhenFinished && isFinished) mTrans.parent = tot;
  69. }
  70. }
  71.  
  72. /// <summary>
  73. /// Start the tweening operation.
  74. /// </summary>
  75.  
  76. static public TweenScaleTransform Begin(GameObject go, float duration, Vector3 scale, Transform from, Transform to)
  77. {
  78. TweenScaleTransform comp = UITweener.Begin<TweenScaleTransform>(go, duration);
  79. comp.from = comp.value;
  80. comp.to = scale;
  81. comp.fromt = from;
  82. comp.tot = to;
  83.  
  84. if (duration <= 0f)
  85. {
  86. comp.Sample(1f, true);
  87. comp.enabled = false;
  88. }
  89. return comp;
  90. }
  91.  
  92. [ContextMenu("Set 'From' to current value")]
  93. public override void SetStartToCurrentValue() { from = value; }
  94.  
  95. [ContextMenu("Set 'To' to current value")]
  96. public override void SetEndToCurrentValue() { to = value; }
  97.  
  98. [ContextMenu("Assume value of 'From'")]
  99. void SetCurrentValueToStart() { value = from; }
  100.  
  101. [ContextMenu("Assume value of 'To'")]
  102. void SetCurrentValueToEnd() { value = to; }
  103.  
  104. }

NGUI Tween动画Scale与Transform冲突的更多相关文章

  1. Unity NGUI Tween动画回调不执行问题

    最近工作中遇到了一个问题 NGUI的Tween动画完成 回调函数 偶尔不执行 偶现Bug 今天我仔细看了下代码发现 TweenPosition tempTween = varTar.GetCompon ...

  2. NGUI的Tween动画的使用

    一,在创建Tween有,alpha,color,width,height,position,rotation,scale和transfrom这几种动画类型 1>alpha:颜色由浅变深(透明度) ...

  3. 关于Unity中NGUI的帧动画和Tween动画

    帧动画 1.把三张帧动画的贴图png制作成图集,NGUI---->Open---->Atlas Maker,生成一个预制体,一个材质球,一个大图 2.创建一个Sprite类型的Sprite ...

  4. Unity NGUI Tween的用法

    unity版本:4.5 NGUI版本:3.6.5 参考链接:http://www.colabug.com/thread-1029974-1-1.html,作者:COLABUG.COM 橘虞   htt ...

  5. Android tween 动画 XML 梳理

    前言: Tween动画是展现出旋转.渐变.移动.缩放的这么一种转换过程,即补间动画.Tween动画有两种定义方式:XML形式,编码形式.这次主要来梳理XML的方式配置动画 (1)XML定义动画,按照动 ...

  6. 【Android动画】之Tween动画 (渐变、缩放、位移、旋转)

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与g ...

  7. android之tween动画详解

    android中一共提供了两种动画,其一便是tween动画,tween动画通过对view的内容进行一系列的图像变换(包括平移,缩放,旋转,改变透明度)来实现动画效果,动画效果的定义可以使用xml,也可 ...

  8. 【转】android动画之Tween动画 (渐变、缩放、位移、旋转)

    原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的 ...

  9. Android动画之Tween动画实战

    Android动画分为Tween动画和Frame动画,上一节通过一个实例介绍了Frame动画,本节将介绍Tween动画.Tween可以把对象进行缩小.放大.旋转和渐变等操作.     Tween动画有 ...

随机推荐

  1. #研发解决方案介绍#Tracing(鹰眼)

    郑昀 最后更新于2014/11/12 关键词:GoogleDapper.分布式跟踪.鹰眼.Tracing.HBase.HDFS. 本文档适用人员:研发   分布式系统为什么需要 Tracing?   ...

  2. ORACLE动态采样分析

    td {border:solid #9ec9ec; border-width:0px 1px 1px 0px; padding:4px 0px;} table {border:1px solid #9 ...

  3. 【hive】——Hive基本操作

    阅读本文章可以带着下面问题:1.与传统数据库对比,找出他们的区别2.熟练写出增删改查(面试必备) 创建表:hive> CREATE TABLE pokes (foo INT, bar STRIN ...

  4. 【转】深入理解SQL的四种连接-左外连接、右外连接、内连接、全连接

    [原文]:http://www.jb51.net/article/39432.htm 1.内联接(典型的联接运算,使用像 =  或 <> 之类的比较运算符).包括相等联接和自然联接.    ...

  5. ARM汇编与C混合编程

    GNU内联汇编 内联汇编即在C中直接使用汇编语句进行编程,使程序可以在C程序中实现C语言不能完成的一些工作,例如,在下面几种情况中必须使用内联汇编或嵌入型汇编 程序中使用饱和算术运算(Saturati ...

  6. 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)

    本节我们来看如何在实验环境中实施和配置如下 VLAN 网络 配置 VLAN 编辑 /etc/network/interfaces,配置 eth0.10.brvlan10.eth0.20 和 brvla ...

  7. android 开启本地相册选择图片并返回显示

    .java package com.jerry.crop; import java.io.File; import android.app.Activity; import android.conte ...

  8. Linux 下编译openjdk

    操作系统ubuntu14.04 openjdk版本 7u4 openjdk7u4可以在https://jdk7.java.net/source.html下载   一.构建编译环境 sudo apt-g ...

  9. Caffe源码解析6:Neuron_Layer

    转载请注明出处,楼燚(yì)航的blog,http://home.cnblogs.com/louyihang-loves-baiyan/ NeuronLayer,顾名思义这里就是神经元,激活函数的相应 ...

  10. 如何用ZBrush快速绘制身体

    Fisker老师用了5节课详细讲解了僵尸的头部制作过程,用了大量时间完善细节部分,在ZBrush3D图形绘制软件中雕刻模型就是这样,需要反复调整与修改,每一个细节都做到极致才是最理想的状态.头部雕刻好 ...