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

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

Tween Scale中

用来设置localScale

Tween Transform中

也用来设置localScale。

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

using UnityEngine;
using System.Collections; public class TweenScaleTransform : UITweener
{ public Vector3 from = Vector3.one;
public Vector3 to = Vector3.one;
public bool updateTable = false;
public Transform fromt;
public Transform tot;
public bool parentWhenFinished = false; Transform mTrans;
Vector3 mPos;
Quaternion mRot;
Vector3 mScale; UITable mTable; public Transform cachedTransform { get { if (mTrans == null) mTrans = transform; return mTrans; } } public Vector3 value { get { return cachedTransform.localScale; } set { cachedTransform.localScale = value; } } [System.Obsolete("Use 'value' instead")]
public Vector3 scale { get { return this.value; } set { this.value = value; } } /// <summary>
/// Tween the value.
/// </summary> protected override void OnUpdate(float factor, bool isFinished)
{
value = from * (1f - factor) + to * factor; if (updateTable)
{
if (mTable == null)
{
mTable = NGUITools.FindInParents<UITable>(gameObject);
if (mTable == null) { updateTable = false; return; }
}
mTable.repositionNow = true;
} if (tot != null)
{
if (mTrans == null)
{
mTrans = transform;
mPos = mTrans.position;
mRot = mTrans.rotation;
mScale = mTrans.localScale;
} if (fromt != null)
{
mTrans.position = fromt.position * (1f - factor) + tot.position * factor;
mTrans.rotation = Quaternion.Slerp(fromt.rotation, tot.rotation, factor);
}
else
{
mTrans.position = mPos * (1f - factor) + tot.position * factor;
mTrans.rotation = Quaternion.Slerp(mRot, tot.rotation, factor);
} // Change the parent when finished, if requested
if (parentWhenFinished && isFinished) mTrans.parent = tot;
}
} /// <summary>
/// Start the tweening operation.
/// </summary> static public TweenScaleTransform Begin(GameObject go, float duration, Vector3 scale, Transform from, Transform to)
{
TweenScaleTransform comp = UITweener.Begin<TweenScaleTransform>(go, duration);
comp.from = comp.value;
comp.to = scale;
comp.fromt = from;
comp.tot = to; 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; } }

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. ios手势操作,四个基本事件与六个常用事件

    基本事件包括begin,canceled,move,ended四项,如果对象的hidden属性为yes,则无效果,hidden属性必须为no;才能使用: -(void)touchesBegan:(NS ...

  2. Java暗箱操作之自动装箱与拆箱

    我以前在写Android项目的时候,估计写得最多最熟练的几句话就是: List<Integer> list = new ArrayList<Integer>(); list.a ...

  3. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    从供应商手中接手一个云平台(Windwos Azure)上的MySQL数据库,登录数据库时遇到错误: $mysql -uroot -p Enter password: ERROR 2002 (HY00 ...

  4. ORA-01102: cannot mount database in EXCLUSIVE mode

    安装完ORACEL 10g数据库后,启动数据库时遇到ORA-01102: cannot mount database in EXCLUSIVE mode [oracle@DB-Server ~]$ s ...

  5. java实现基于activeMQ的消息推送

    一. 准备工作 1. 点击此下载相关的第三方jar包,并在工程中引用 二. spring配置文件:application.xml <?xml version="1.0" en ...

  6. Nagios监控平台搭建

    Nagios是一款开源的免费网络监视工具,能有效监控Windows.Linux和Unix的主机状态,交换机路由器等网络设置,打印机等.在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员, ...

  7. 追MM的各种算法

    原文:http://blog.sae.sina.com.cn/archives/3542#more-3542 看到一篇文章把算法描述的相当的好,先收藏了! 动态规划 基本上就是说:你追一个MM的时候, ...

  8. OpenStack云计算快速入门之三:OpenStack镜像管理

    原文:http://blog.chinaunix.net/uid-22414998-id-3272059.html 第三部分 OpenStack镜像管理 一.简介 很多源都有为OpenStack已经编 ...

  9. centos yum update kernel

    1.查看当前kernel版本 uname -r 2.查看已安装版本 rpm -q kernel 3.查看可升级kernel版本 yum list kernel 4.升级kernel版本 yum upd ...

  10. 用javascript插入样式

    一.用javascript插入<style>样式 有时候我们需要利用js来动态生成页面上style标签中的css代码,方法很直接,就是直接创建一个style元素,然后设置style元素里面 ...