将此脚本挂载图片上面,可以实现图片向某个方向移动然后再回到原地,反复执行。这样最初时为了实现一个箭头图片不断移动来达到提示的ui效果。
/*--------------------------------------------------------------------
- Author Name: DXL
- Creation Time: 6/3/2019 6:32:52 PM
- File Describe: 箭头提示的特效
- ------------------------------------------------------------------*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
public class ArrowTipEffect : MonoBehaviour
{
public enum TipEffect
{
Up,
Down,
Left,
Right,
Flcker, //闪烁
}
public TipEffect tip; //当前效果
public float moveDistance; //移动距离
public float moveTime = 1f; //单次特效时间
Vector3 p;
// Use this for initialization
void Start()
{
StartMove();
}
void OnDisable()
{
DOTween.Pause(transform);
}
void OnEnable()
{
p = transform.localPosition;
//这里不能简简单单的恢复,因为物体可能位置发生了变化,里面的坐标还是之前旧的
//DOTween.Restart(transform);
//DOTween.Play(transform);
StartMove();
}
private void OnDestroy()
{
DOTween.Kill(transform);
if(TimeManager.Instance)
{
TimeManager.Instance.Destroy(transform.name + "flicker");
}
}
void StartMove()
{
p = transform.localPosition;
if (tip == TipEffect.Up)
{
transform.DOLocalMove(new Vector3(p.x, p.y + moveDistance, p.z), moveTime).SetLoops(-1, LoopType.Restart);
}
else if (tip == TipEffect.Down)
{
transform.DOLocalMove(new Vector3(p.x, p.y - moveDistance, p.z), moveTime).SetLoops(-1, LoopType.Restart);
}
else if (tip == TipEffect.Left)
{
transform.DOLocalMove(new Vector3(p.x - moveDistance, p.y, p.z), moveTime).SetLoops(-1, LoopType.Restart);
}
else if (tip == TipEffect.Right)
{
transform.DOLocalMove(new Vector3(p.x + moveDistance, p.y, p.z), moveTime).SetLoops(-1, LoopType.Restart);
}
else if (tip == TipEffect.Flcker)
{
TimeManager.Instance.AddTimerRepeat(transform.name + "flicker", moveTime / 2, () =>
{
transform.gameObject.SetActive(!transform.gameObject.activeInHierarchy);
});
}
}
}