NGUI Tween动画Scale与Transform冲突

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; }

}
时间: 2024-09-29 02:19:02

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

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

最近工作中遇到了一个问题 NGUI的Tween动画完成 回调函数 偶尔不执行 偶现Bug 今天我仔细看了下代码发现 TweenPosition tempTween = varTar.GetComponent<TweenPosition>(); if (tempTween == null) { Debuger.LogError("MainUITaskAward: Play() tempTween == null"); return; } tempTween.ResetToBe

ios layer 动画-(transform.scale篇)

x轴缩放:CABasicAnimation *theAnimation;theAnimation=[CABasicAnimation animationWithKeyPath:@"transform.scale.x"];theAnimation.duration=8;theAnimation.removedOnCompletion = YES;theAnimation.fromValue = [NSNumber numberWithFloat:1];theAnimation.toVal

通过编码和xml文件两种方式实现tween动画

tween有四种动画效果:alpha(透明).rotate(旋转), translate(移动),scale(缩放); 可以通过硬编码和xml文件这两种方式来实现. xml实现: 第一步:在项目的res文件下面新建一个文件夹名字是anim(必须) 第二步:在anim文件夹下面新建新的xml文件,在xml文件中具体设置动画效果 第三步:在Activity中使用 AnimationUtils.loadAnimation(MainActivity.this,R.anim.xx);来获取. 1.alph

Android Tween动画

View Animation, 即显示在view上的Tween Animation Tween动画,本质上不改变View对象本身,只改变它的绘制方式 两种实现方式,一种在xml中定义,一种直接在代码里定义 xml定义方式: 位移动画translate <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk

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

Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation  动画 AlphaAnimation 渐变透明度 RotateAnimation 画面旋转 ScaleAnimation 渐变尺寸缩放 TranslateAnimation 位置移动 Animatio

Tween动画

abdroid提供了两种动画:Tween金额Fram动画,下面介绍第一种: Tween动画是通过对view的内容通过一系列的图形变化(包括平移.缩放.旋转.改变透明度)来实现动画效果.动画效果可以在xml文件里做,也可以采用编码来做: 下面的demo实现了2种方法,即,1.在代码里实现:2.在src文件下创建anim文件,用XML里实现 首先大家看一下布局:就是5个按键,点击按键的时候Imgeview图片做相应的动作. <LinearLayout xmlns:android="http:/

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

原文:http://blog.csdn.net/feng88724/article/details/6318430 Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 第二类就是 Frame动画,即顺序的播放事先做好的图像,与gif图片原理类似. 下面就讲一下Tweene Animations. 主要类: Animation   动画 AlphaAnimation 渐变透明度 RotateAnimation

Tween动画实现

Tween动画主要的功能是在绘制动画前设置动画绘制的轨迹,包括时间.位置等等,但Tween动画的缺点是他只能设置起点与结束点的两帧,中间过程全部由系统帮我们完成,所以在帧数比较多的游戏开发中是不太会用的. Tween一共提供了四种动画效果: Scale:缩放动画 Rotate:旋转动画 Translate:移动动画 Alpha:透明渐变动画 Tween与Frame动画类都需要在res\anim路径下创建动画的布局 1.Scale缩放动画 <scale>标签为缩放节点 android:fromX

Android的Tween动画的实现框架

在写程序的时候遇到了Tween动画几个问题: 1,  执行动画的时候点击事件仍然在动画开始的位置? 2,  XXXAnimation的构造参数里面的值具体是什么意思? 3,  平移动画中fromXValue和toXValue旋转动画中fromDegrees和toDegrees取负值有什么不同??(相信很多人也有疑惑) 4,  RotateAnimation的int pivotXType, float pivotXValue, int pivotYType, float pivotYValue四个