zoukankan      html  css  js  c++  java
  • Unity3D 文字滚动跑马灯效果

    需求

    在日常游戏中,文字滚动效果是比较常用的。例如日常游戏顶部的新闻公告,聊天系统的文字滚动,都属于这个范围。

     

    思路

    由于使用的地方比较广泛,所以希望能够尽量独立的游戏之外,能够做到随处使用的功能。NGUI中有很方便的实现,由于功能比较简单,我这里就使用U3D中原生的GUI进行实现,便于以后的移植。

    实现

    一、新闻公告类

    新闻公告类的文字滚动一般都是由左向右,或者由下至上滚动的,并且多是单行单列的模式。

    public class Lamp : MonoBehaviour {
    
        public float scrollviewWidth;
        public float scrollviewHeight;
        public float moveSpeed;
        public GUISkin guiSkin;
    
        private float textPositionX = 10f;
    
        void OnGUI()
        {
            GUI.skin = guiSkin;
            float scrollviewPositionX = (Screen.width - scrollviewWidth)/2;//居中
    
            //开始滚
            GUI.BeginScrollView(new Rect(scrollviewPositionX, 10, scrollviewWidth, scrollviewHeight), Vector2.zero, new Rect(10, 10, scrollviewWidth, scrollviewHeight));    
            GUI.Label(new Rect(textPositionX,10,770,40),"翻滚吧!大爷!!");
            textPositionX += Time.deltaTime*moveSpeed;
            //结束滚
            GUI.EndScrollView();
        }  
    }
    Lamp

    背景与本主题无关。。。。。

    不过看起来字体有一点小,由于滚动区域和可视区域大小是一致的,所以没有显示出滚动条。在调用OnGUI的时候我提前设置了GUISkin,只需要修改GUISkin,就可以改变外观了。

    简单的加了个纯色的背景,字体放大了点,有一点滚动条的意思了,没有可爱的美术同学的帮助果然很难看呀,只好先将就将就了。

    一个简单的跑马灯就大功告成了。

    二、聊天界面类

    相对于新闻公告类来说的,聊天类就需要一个堆栈的布局,由上至下的进行添加。

     1 public class Chat : MonoBehaviour {
     2 
     3     public string stringToEdit;
     4     private List<string> chatContents = new List<string>();
     5 
     6     void Start () {
     7         stringToEdit = string.Empty;
     8     }
     9 
    10 
    11     void OnGUI()
    12     {
    13         GUI.BeginScrollView(new Rect(10, 10, 400, 400), Vector2.zero, new Rect(10, 10, 400, 600)); 
    14         for (int i=0; i<chatContents.Count; i++) {
    15             GUI.Label (new Rect (10, 10*(i+1), 770, 40), chatContents[i]);
    16         }
    17         GUI.EndScrollView();
    18 
    19         stringToEdit = GUI.TextArea(new Rect (10, 420, 400, 60), stringToEdit,200);
    20         if (GUI.Button (new Rect (420, 420, 100, 40), "Send")) {
    21             if(chatContents.Count>10){
    22                 chatContents.RemoveAt(0);
    23             }
    24             chatContents.Add (stringToEdit);
    25             stringToEdit = string.Empty;
    26         }
    27     }
    28 }
    Chat

    以上代码基本实现了聊天界面的展示,聊天显示内容数量的控制。

      

    总结

      直接使用OnGUI绘制的方法能够提高功能的复用度,基本上可以做到哪里需要就直接使用一个类库文件进行迁移。但是这只是简单的实现了其基本的功能,例如数据接口,运动方向控制等功能都还可以进行进一步的扩展。

  • 相关阅读:
    编程时候底层函数的来源
    (转)线程相关的东东
    (转)CreateThread与_beginthread,内存泄漏为何因(原帖排版有些不好 ,所以我稍微整理下)
    测试CDockablePane。 测试他的最基本的功能。
    (转)单例模式(Singleton)的常见应用场景
    (转)http 之session和cookie
    Palindrome Linked List
    Basic Calculator II
    (转)外部排序
    (转)eclipse调试java程序的九个技巧
  • 原文地址:https://www.cnblogs.com/nightcat/p/unity3d_003.html
Copyright © 2011-2022 走看看