学习记录:Dotween的学习记录

今天做了一个退出按钮的tweener动画,想的效果是,鼠标移上去,按钮移入,鼠标移除,按钮移除,点击退出按钮,退出程序。

1:效果图

2 :Tweener的记录

//关闭按钮
    [SerializeField] RectTransform closeButton;
    //初始结束位置
    Vector2 startPos;
    Vector2 endPos;
    //tweener动画
    Tweener closeButtonShow;
    Tweener closeButtonDisShow;
    void Start()
    {
        startPos = closeButton.anchoredPosition;
        endPos = closeButton.anchoredPosition - new Vector2(0, 150);

        //移入动画记录
        closeButtonShow = closeButton.DOAnchorPosY(endPos.y, 1);
        closeButtonShow.SetAutoKill(false);
        closeButtonShow.Pause();

        //移除动画记录
        closeButtonDisShow = closeButton.DOAnchorPosY(startPos.y, 1);
        closeButtonDisShow.SetAutoKill(false);
        closeButtonDisShow.Pause();

    }

注意事项:(记录一下我出问题的地方)

1 UI图片运用dotween移动时,不能用DoMove,要用DOAnchorPos,DoMove是针对Tranform的,而后一个是针对2D物体的。

2  要想动画一直播放,记得把动画的SetAutoKill()设为false,这个属性是是否杀死动画,就是播放完一次,图片就不再播放了,如果需要一直播放,记得把他置为false。

3 记住Tweener动画记录的这三条语句

3 鼠标移入和移除

这里需要用到鼠标的两个接口,IPointerEnterHandler, IPointerExitHandler,

public class Close : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{

}

在MonoBehaviour后面加个逗号,写上两个接口,再实现接口就好了

然后再接口方法中,播放dotween动画

//鼠标进入
    public void OnPointerEnter(PointerEventData eventData)
    {
        closeButtonShow.Restart();
        
    }
    //鼠标移除
    public void OnPointerExit(PointerEventData eventData)
    {
        closeButtonDisShow.Restart();
    }

注意事项:播放动画时,用ReStart(),因为这里需要每次鼠标移入移除,都播放动画,所以每次都让他重新播放,而Play()只能播放一次,不能实现需求。

dotween的二次学习:

实现功能,点击鼠标,图片向右移动出现,再点击一次,图片回到原来位置隐藏,连续点击的时候,不会出现左右摇摆的状态,等播放完上一个动画之后,再播放下一个动画。

效果图:

 

 RectTransform QRImage;

    bool isShow;   //是否出现的bool值,出现为true,隐藏为false
    //tweenwe动画
    Tweener QRTweenerShow;      //出现动画
    Tweener QRTweenerDisPlay;   //消失动画

    private void Start()
    {
        QRImage = gameObject.transform.GetComponent<RectTransform>();

        //初始,结束位置赋值
        float startX = QRImage.anchoredPosition.x;
        float endX = QRImage.anchoredPosition.x + 55;

        //一开始是隐藏状态
        isShow = false;

        //二维码出现,消失的动画记录,按钮的委托事件
        QRTweenerShow = QRImage.DOAnchorPosX(endX, 0.5f);
        QRTweenerShow.SetAutoKill(false);
        QRTweenerShow.Pause();
        QRTweenerShow.OnComplete(delegate { isEnd = false; });

        QRTweenerDisPlay = QRImage.DOAnchorPosX(startX, 0.5f);
        QRTweenerDisPlay.SetAutoKill(false);
        QRTweenerDisPlay.Pause();
        QRTweenerDisPlay.OnComplete(delegate { isEnd = false; });


        //按钮监听
        QRImage.GetComponent<Button>().onClick.AddListener(QRImageShowAndHide);
    }
    bool isEnd; //false 结束
    public void QRImageShowAndHide()
    {
        //当不是结束状态时,播放动画
        if (!isEnd)
        {
            //当isShow=true时,执行消失的动画,当=false时,执行出现的动画
            Tweener tweener = isShow ? QRTweenerDisPlay : QRTweenerShow;
            tweener.Restart();
            tweener.Play();
            isShow = !isShow;
            isEnd = true;
        }
    }

重点记录:当需要鼠标点一次执行一个方法,再点一次再执行一个方法的时候,用bool值添加一个判断

在QRImageShowAndHide()这个方法中也可以用if和else,但是上面的方法更加简洁

    if (isShow)
        {
            QRTweenerDisPlay.Restart();
            QRTweenerDisPlay.Play();
            isShow = false;
        }
        else
        {
            QRTweenerShow.Restart();
            QRTweenerShow.Play();
            isShow = true;
        }

不可以用两个if,如果是两个if的话,他俩是并列的,就在方法体内形成了循环了,图片是不移动的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值