unity制作弹框

这篇博客详细介绍了如何在Unity中使用DOTween库创建UI元素的动画效果,包括设置动画时长、停留时间、显示位置和顺序。同时,结合Easy Event Manager插件,实现了事件触发显示窗口的功能,允许根据消息类型直接播放、等待序列或等待上一个动画播放完毕。文章还涵盖了枚举类型的使用以及事件监听和注销的实现过程。
摘要由CSDN通过智能技术生成


首先定义提示框的 属性

protected MessageStrings messageName;
[Tooltip("动画时长")] public float tweenDuration;
[Tooltip("停留时长")] public float stayDuration;
[Tooltip("停留的位置")] public ShowPos showPos;
[Tooltip("显示顺序")] public ShowMode showMode;
//偏移量
[PropertyRange(-1000,1000)]
public float offsetX;
[PropertyRange(-1000,1000)]
public float offsetY;
protected Sequence sequence;
public enum ShowMode
{
    Direct,//直接播放
    Wait,	//等上一个播完 
}

//出现位置
public enum ShowPos
{
    MiddleUp,
    MiddleDown,
    LeftUp,
    RightUp,
}

然后根据不同属性设置不同动画

protected virtual void InitTweenData()
{
    sequence = DOTween.Sequence();
    var canvasRect = transform.GetComponentInParent<Canvas>().GetComponent<RectTransform>().rect;
    var rect = GetComponent<RectTransform>().rect;
    transform.SetLocalX(0);
    switch (showPos)
    {
        case ShowPos.MiddleUp:
            transform.SetLocalY(canvasRect.height / 2 + rect.height / 2);
            sequence.Append
                (transform
                 .DOLocalMoveY(canvasRect.height / 2 -rect.height / 2+offsetY, tweenDuration));
            break;
        case ShowPos.MiddleDown:
            transform.SetLocalY(-canvasRect.height / 2 - rect.height / 2);
            sequence.Append(transform
                            .DOLocalMoveY(-canvasRect.height / 2 + rect.height / 2+offsetY, tweenDuration)
                           );
            break;
        case ShowPos.LeftUp:
            transform.SetLocalY(canvasRect.height / 2 - rect.height / 2+offsetY);
            transform.SetLocalX(-canvasRect.width / 2 -rect.width / 2);
            sequence.Append(transform
                            .DOLocalMoveX(-canvasRect.width / 2 + rect.width / 2+offsetX, tweenDuration)
                           );
            break;
        case ShowPos.RightUp:
            transform.SetLocalY(canvasRect.height / 2 - rect.height / 2+offsetY);
            transform.SetLocalX(canvasRect.width / 2 + rect.width / 2);
            sequence.Append(transform
                            .DOLocalMoveX(canvasRect.width / 2- rect.width / 2+offsetX, tweenDuration)
                           );
            break;
    }

    sequence.AppendInterval(stayDuration);
    sequence.SetLoops(2, LoopType.Yoyo);
    sequence.Pause();
    sequence.SetAutoKill(false);
}

显示窗口

public virtual void Show()
{
    switch (showMode)
    {
        case ShowMode.Direct:
            sequence.Restart();
            break;
        case ShowMode.Sequence:
            break;
        case ShowMode.Wait:
            if (!sequence.IsPlaying())
            {
                sequence.Restart();
            }
            break;
    }
}

然后通过事件系统调用https://assetstore.unity.com/packages/tools/integration/easy-event-manager-147887

定义不同消息的 枚举

public static class MessageStrings
{
    public enum WindowMsgStr
    {
        MSG_ShowHintWindow,
    }
}

事件注册与注销

protected virtual void Awake()
{
    InitTweenData();
    EventManager.StartListening(messageName.ToString(),Show);
}
protected virtual void OnDestroy()
{
    EventManager.StopListening(messageName.ToString(),Show);
}

最后在需要的地方发送消息即可

EventManager.EmitEvent(messageName.ToString());

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值