前置

  1. DoTween插件(AssetStore内置)
  2. NGUI

实现一个自滚动的,自消失,自渐变的滚动通知信息(同样可以作为聊天信息)

导入这俩个插件,然后在页面里新建一个UILABEL(NGUI)(随便建什么,开心就好)

给他加上NGUI自带的TweenAlpha脚本(渐变Alpha通道)

配置设置成1->0,也就是从可见变为不可见,默认打开关闭,延迟设为2秒(你想显示多久就设置多久)

ONFINISHED设置成第二个脚本的OnFinshed方法,下面会说。

如何在Unity3D中实现滚动通知
控件的配置

给他加上俩个脚本

第一个当然是主要的脚本。

public static void DiaLogShow(string text) //参数是显示的文本,你也可以加上颜色字体什么的参数。
{
    GameObject zimu = GameObject.Find("控件名称"); //获取到你的控件
    GameObject newgo = GameObject.Instantiate(zimu);//新生成一个控件
    newgo.transform.SetParent(GameObject.Find("UI Root").transform);//把新生成的父类设置成NGUI的UIROOT,防止下面的local坐标对不上。
    newgo.GetComponent<UILabel>().text = text;//吧参数里的文本赋值给新生成的
    newgo.GetComponent<TweenAlpha>().PlayForward();//让新生成的控件的Alpha渐变开始。
    newgo.transform.localPosition = new Vector3(0, -350, 0); //设置他的坐标,我是保持在屏幕中间,你们按照自己的设置,记住是local坐标。
    newgo.transform.localScale = new Vector3(1, 1, 1);//同上
    try //用于实现自向上滚动
    {
        GameObject[] SameName = GameObject.FindGameObjectsWithTag("OldZimu"); //创建GAMEOBJECT的数组,遍历一遍吧所有带OLDZIMU标签的全部抓进去,这个下面会说。
        foreach (GameObject a in SameName)//吧上面的数组遍历一遍。
        {
            a.transform.DOLocalMoveY(a.transform.localPosition.y + 30f, 0.3f); //用的是Dotween,记得导入他的命名空间,让所有的数组里的老控件全不向上移动30距离,同理-30就是往下,自定义。
        }
    }
    catch
    {
    }

    newgo.transform.tag = "OldZimu"; //最后再把自己加入到OLDZIMU中,这样下次新生成的控件就会把这个往上顶了。
}

第二个脚本(也可以写一起)。

    public void OnFinshed()
    {
        Destroy(this.gameObject); //在alpha渐变播放完之后吧自己删掉。
    }
如何在Unity3D中实现滚动通知
效果

总结

不用这俩个插件我是真的不会写,又要延迟又要平滑移动,烦死人了。


Per Aspera Ad Astra