Unity3d自学记录 DOTween插件部分方法

今天实现一个主角受到攻击然后屏幕颜色渐变的效果,用了下DOTween插件,它可用来做补间动画。

首先定义一个Tween类的实例用来保存动画:

private Tween tweener = image.DOFade(0, changeAlphaTime);
tweener.Pause();

然后,当主角受到攻击的时候进行播放动画:

public void ShowScreenEffectImage()
{
    //设置初始透明度
    Color tmpColor = image.color;
    tmpColor.a = (float)(originNum * 1.0 / 255);
    image.color = tmpColor;
    tweener.Play();
        
}

然后就发现了一个问题,受到第一下攻击的时候显示正常,第二下渐变时间忽然变短,哦!晓得了,应该是当tweener动画播放的时候,再次调用Play()方法的话,上一次如果动画没有播放完,中途又更新了下透明度值,就会造成动画播放了两次的错觉,其实依旧是播放了一次,只不过中途透明度又设置成初始的了。

(勤勤恳恳的改bug。。。)

这个时候我换了个方法:ReStart(),表示重新播放动画,改过之后,发现当我被敌人打一次后,跑掉再回来继续挨打(好智障,,,),就不再显示了,看到SetAutoKill方法,想到应该是动画自动销毁了,然后设置成不被销毁。。。

结束。。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class DamageScreenEffect : MonoBehaviour {


    public static DamageScreenEffect instance;
    private Tween tweener;
    private Image image;
    //透明度
    public int originNum=80;
    public float changeAlphaTime = 1f;

    private void Awake()
    {
        instance = this;
        image = this.GetComponent();
        this.gameObject.SetActive(false);
        
    }
    // Use this for initialization
    void Start () {
        Color tmpColor = image.color;
        tmpColor.a = (float)(originNum * 1.0 / 255);
        image.color = tmpColor;
        tweener = image.DOFade(0, changeAlphaTime);
        tweener.SetAutoKill(false);
        tweener.Pause();
    }
	
	// Update is called once per frame
	void Update () {
		
	}
    public void ShowScreenEffectImage()
    {
        this.gameObject.SetActive(true);
        tweener.Restart();
        
    }
}

j加油。。。

你可能感兴趣的:(Unity3d)