2013-12-19 10:52:04 xuanjian6 阅读数 5559
  • Unity3D协程-基础篇

    本课程为Unity3D协程技术精讲中的基础部分,协程是UnityEngine技术里面为常用且设计为精髓的技术;基础部分主要讲解协成的前世今生,其中包括设计模式、实现模式、验证模式的递进式推进过程让同学们掌握协程原理与程序设计。

    2116 人正在学习 去看看 曾家海

有时文本框中的文字过多会超出文本框的显示范围,影响显示效果。曾经尝试改变字体大小,倒是差强人意。但是,跟整体的风格就不一致了!百度了一下没有找到结果,还是google给力,一个链接就搞定了!

Unity3d本身就已经为我们考虑到了这个问题,并且提供了两种解决方案。http://docs.unity3d.com/Documentation/ScriptReference/GUIStyle-clipping.html


使用GUIStyle定义文字样式,其中,提供了Overflow和Text Clipping两种方法来处理文字过长的情况。

Overflow:当文字过长时,文字会在文本框外浮动。

Text Clipping:当文字过长时,系统会根据设置的TextClipping的值对文字进行裁剪,使其只显示固定数量的字符。当然可以用鼠标滑动来显示其他的字符,但是每一时刻文本框 中都只显示固定数量的字符。

2013-05-03 21:42:50 iteye_20251 阅读数 170
  • Unity3D协程-基础篇

    本课程为Unity3D协程技术精讲中的基础部分,协程是UnityEngine技术里面为常用且设计为精髓的技术;基础部分主要讲解协成的前世今生,其中包括设计模式、实现模式、验证模式的递进式推进过程让同学们掌握协程原理与程序设计。

    2116 人正在学习 去看看 曾家海

TextField控件主要用于监听用户输入的信息,其应用非常普遍,比如在游戏登录界面中,玩家输入用户名与密码后,点击“确认”按钮判断其输入是否正确,或者游戏通关后填写胜利者姓名与输入相关游戏信息等。

一般情况下,GUI.TextField()方法显示输入框,该方法的返回值为用户输入的字符串信息。使用GUI.PasswordField()方法,可以将用户输入的信息显示为任意字符串,一般在输入密码时将密码以“****”的形式显示。后面的参数“*[0]用来将输入的字符串显示为“****”。

 

下面是说明控件用法、效果的代码示例:

  #pragma strict
  
  //定义存储用户名的变量
  private var username:String;
  //定义存储密码的变量
  private var password:String;
  //定义存储提示信息的变量
  private var editShow:String;
  
  function Start () {
  	editShow = "请输入正确的用户名与密码!";
  	username = "请输入用户名";
  	password = "请输入密码";
  }
  
  function OnGUI () {
  	//显示提示信息内容
  	GUI.Label(Rect(10,10,Screen.width,30),editShow);
  	
  	//编辑框提示信息
  	GUI.Label(Rect(10,40,50,30),"用户名:");
  	//获取用户名输入框中的输入内容
  	username = GUI.TextField(Rect(60,40,200,30),username,15);
  	
  	GUI.Label(Rect(10,80,50,30),"密  码:");
  	//获取密码输入框中的输入内容
  	password = GUI.PasswordField(Rect(60,80,200,30),password,"*"[0],15);
  	
  	if(GUI.Button(Rect(10,120,100,50),"登录")){
  		//点击按钮修改提示信息
  		editShow = "你输入的用户名为:"+username+"   你输入的密码为:"+password;
  	}
  }

 

 

上述代码中,使用GUI.TextField()方法在屏幕中添加一个输入框对象,用户可以在输入框中输入任意文字,该方法的返回值为用户输入的信息,返回值数据类型为StringGUI.PasswrodField()方法同样可以在屏幕中添加一个输入框对象,其用法与GUI.TextField()方法几乎一样,但是这个输入框限制了显示的内容,让其显示的内容以“*”代替,程序运行后的结果如下图所示:

 

<!--EndFragment-->

<!--EndFragment-->
2015-05-13 09:18:17 hushiwei1993 阅读数 386
  • Unity3D协程-基础篇

    本课程为Unity3D协程技术精讲中的基础部分,协程是UnityEngine技术里面为常用且设计为精髓的技术;基础部分主要讲解协成的前世今生,其中包括设计模式、实现模式、验证模式的递进式推进过程让同学们掌握协程原理与程序设计。

    2116 人正在学习 去看看 曾家海
Unity为大家提供了一套很完整的图形化界面引擎,包括窗口、文本框、拖动条等。下面将为大家介绍主要的基本控件。


一、Label控件

       Label控件(标签控件)以文本的形式来显示一串字符串信息,该控件不仅可以输入字符串信息,还可以输入贴图。

参数:
position : Rect ——标签在屏幕上的矩形位置,(起点x坐标,起点y坐标,标签宽度,标签高度)。
text : String ——在标签上显示的文本内容。
image : Texture ——在标签上显示的纹理。
content : GUIContent ——在标签上显示的文本、图片和信息提示。
style : GUIStyle ——使用的样式,如果不使用,那么标签的样式使用的就是当前的GUISkin皮肤
描述:
在屏幕上创建一个文本或纹理的标签。

标签没用用户交互,不捕捉鼠标点击,如果想创建响应用户输入的控件,可以使用Box控件。

案例:绘制一个“Hello World!”标签和一个图片标签
       首先,在Project视图中的一个文件夹上右击→Create→C# Script,然后为其重命名为Label。在这里需要注意的是脚本文件的名称必须和脚本中pulic class XXX :MonoBehaviour一样,不然会出错的。双击打开脚本编写器,接着就是编写脚本,编写的内容如下:
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine; 
  2. using System.Collections; 
  3.  
  4. public class Label : MonoBehaviour { 
  5.  
  6.     public Texture img;//图片/ 
  7.      
  8.     void OnGUI() 
  9.     { 
  10.         GUI.Label(new Rect(10,10,200,20),"Hello World!"); 
  11.         GUI.Label(new Rect(10,50,200,200),img); 
  12.     } 
        在这个脚本中只用一个OnGUI方法,该方法为绘制界面的方法,所有GUI的绘制都需要在这个方法中实现。
        另外,脚本必须绑定到对象上才会执行自身的生命周期。绑定的方法很简单,就是在Project视图中将该脚本文件拖拽到Hierarchy视图中的一个对象上即可。在这里我们将Label.cs脚本绑定到Main Camera对象上。
       接着是图片变量的赋值,首先只用公有变量才能从Project中拖拽赋值或者手动输入赋值,即前面有public关键字。

游戏视图:


二、Button控件和RepeatButton控件

       Button控件(按钮控件)用来进行用户的行为判断,例如:确认,取消,退出等。按钮有3中状态:未点击,点击,点击后,在一般情况下,我们只用到未点击和点击这2种情况。

Parameters(参数):
position : Rect ——按钮在屏幕上的矩形位置,(起点x坐标,起点y坐标,按钮宽度,按钮高度)
text : String ——按钮上显示的文本内容
image : Texture ——按钮上显示的图片纹理
content : GUIContent ——按钮的文本,图片和提示。
style : GUIStyle ——按钮使用的样式,如果不使用,则按钮的样式使用的就是当前的GUISkin皮肤


Returns(返回):
布尔值——当该按钮被点击时返回true

Description(描述):
创建一个单次按下按钮,当用户点击按钮时立即触发事件。

RepeatButton(连续按钮)用于持续按下时触发事件的按钮,普通的Button按钮适用与单次按下。

参数与普通的Button没什么大的区别。

Returns返回值:
布尔值——当用户按下该按钮时返回true。

描述:
创建一个按钮,只要用户按住不放,将一直被激活。
从按下按钮到释放按钮的时间内重复触发其Click事件,也就是说他将连续不停的发送点击事件。

案例:创建3个按钮,分别为普通文本按钮,普通图片按钮,连续按钮。再创建了3个标签,第一个标签用于显示用户按下的按钮是哪一个,第二个标签是用来显示普通图片按钮按下后,绘制一个图片出来,第三个标签用来记录连续按钮按下的时间。
[csharp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. using UnityEngine; 
  2. using System.Collections; 
  3.  
  4. public class Button : MonoBehaviour { 
  5.  
  6.     public Texture img;//公有变量图片/ 
  7.     private Texture img0; 
  8.     private string info;//显示的信息/ 
  9.     private int frameTime;//记录按下的时间/ 
  10.      
  11.     void Start() 
  12.     { 
  13.         //初始化/ 
  14.         info = "请您点击按钮"
  15.         frameTime = 0; 
  16.     } 
  17.      
  18.     void OnGUI() 
  19.     { 
  20.         //标签/ 
  21.         GUI.Label(new Rect(50,10,200,20),info);      
  22.         //普通按钮,点击后显示Hello World 
  23.         if(GUI.Button(new Rect(50,250,200,20),"Hello World")) 
  24.         { 
  25.             info = "Hello World"
  26.         } 
  27.         //标签/ 
  28.         GUI.Label(new Rect(280,10,200,200),img0); 
  29.         //图片按钮,点击后显示图片/ 
  30.         if(GUI.Button(new Rect(280,250,200,200),img)) 
  31.         { 
  32.             img0 = img; 
  33.             info = "您点击了图片按钮"
  34.         } 
  35.         //标签/ 
  36.         GUI.Label(new Rect(500,10,200,20),"持续按下的时间:" + frameTime); 
  37.         //连续按钮,点击后显示按下的时间/ 
  38.         if(GUI.RepeatButton(new Rect(500,250,200,20),"持续按下")) 
  39.         { 
  40.             frameTime ++ ; 
  41.             info = "您按下了连续按钮"
  42.         }        
  43.         //每当鼠标按下时将frameTime重置,一遍进行下次记录/ 
  44.         if(Input.GetMouseButtonDown(0)) 
  45.         { 
  46.             frameTime = 0; 
  47.         } 
  48.     } 
在这里依旧需要将脚本绑定Main Camera上,并且将需要赋值的公有变量进行赋值,在Label控件中我已经介绍了,这里就不废话了~

游戏视图:







———————————————
参考文献:
《Unity3D 游戏开发》宣玉松
Unity Script Reference
2016-05-10 11:23:19 andyhebear 阅读数 3498
  • Unity3D协程-基础篇

    本课程为Unity3D协程技术精讲中的基础部分,协程是UnityEngine技术里面为常用且设计为精髓的技术;基础部分主要讲解协成的前世今生,其中包括设计模式、实现模式、验证模式的递进式推进过程让同学们掌握协程原理与程序设计。

    2116 人正在学习 去看看 曾家海

转载请保留原文链接:http://blog.csdn.net/andyhebear/article/details/51361747

    void Start() {
        if (this.Button == null) {
            this.Button = this.GetComponentInChildren<UI_ButtonClick>();
        }
        if (this.InputText == null) {
            this.InputText = this.GetComponentInChildren<InputField>();
        }
        this.Button.OnClickEvent += Button_OnClickEvent;
        this.InputText.onValidateInput = _OnValidateInput;
        this.InputText.onEndEdit.AddListener(input_OnEndEdit);
    }
    char _OnValidateInput(string text, int charIndex, char addedChar) {       
        if (!_isValidChar(addedChar)) return '\0';//返回空
        return addedChar;
    } 
    //非法字符列表
    private bool _isValidChar(char addedChar) {
        //char[] invalid1 =System.IO.Path.GetInvalidFileNameChars();
        //for (int i = 0; i < invalid1.Length; i++) {
        //    if (invalid1[i] == addedChar) {
        //        return false;
        //    }
        //}
        //char[] invalid2=System.IO.Path.GetInvalidPathChars();
        //for (int i = 0; i < invalid2.Length; i++) {
        //    if (invalid2[i] == addedChar) {
        //        return false;
        //    }
        //}
        for (int i = 0; i < InvalidFilePathNameChars.Length; i++) {
            if (((int)addedChar) == (int)InvalidFilePathNameChars[i]) {
                return false;
            }
        }
        for (int i = 0; i < InvalidCustomChars.Length; i++) {
            if (addedChar == InvalidCustomChars[i]) {
                return false;
            }
        }
        return true;
    }
    /// <summary>
    /// 非法文件名路径 字符char值
    /// GetInvalidFileNameChars(),GetInvalidPathChars()
    /// </summary>
    private static readonly byte[] InvalidFilePathNameChars = new byte[]{
      34,60,62,124,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,
      21,22,23,24,25,26,27,28,29,30,31,58,42,63,92,47
    };
    /// <summary>
    /// 自定义非法字符
    /// </summary>
    private static readonly char[] InvalidCustomChars = new char[]{
        '\'','"','~','`','!','@','#','$','%','^','&','*','(',')','+','=','>','<',
        '|','{','}','/','\\',':',';',',','?'        
    };
  
    /// <summary>
    /// 判断字符的Unicode值是否是汉字
    /// </summary>
    /// <param name="code">字符的Unicode</param>
    /// <returns></returns>
    protected static bool IsChineseLetter(int code) {
        int chfrom = System.Convert.ToInt32("4e00", 16);    //范围(0x4e00~0x9fff)转换成int(chfrom~chend)
        int chend = System.Convert.ToInt32("9fff", 16);

        if (code >= chfrom && code <= chend) {
            return true;     //当code在中文范围内返回true

        }
        else {
            return false;    //当code不在中文范围内返回false
        }

        return false;
    }
 

2016-01-21 14:51:59 andyhebear 阅读数 12139
  • Unity3D协程-基础篇

    本课程为Unity3D协程技术精讲中的基础部分,协程是UnityEngine技术里面为常用且设计为精髓的技术;基础部分主要讲解协成的前世今生,其中包括设计模式、实现模式、验证模式的递进式推进过程让同学们掌握协程原理与程序设计。

    2116 人正在学习 去看看 曾家海
可以用来让用户从列表中选择一个选项的选择。

控制显示当前选择的选项。 一旦点击,它打开了选项列表中,可以选择一个新的选项。 在选择一个新的选项,再次关闭的列表,控制显示了新的选择选项。 列表也关闭,如果用户点击控制本身,或其他地方在画布上。

A Dropdown.一个下拉。A Dropdown with its list of options open.打开下拉列表的选项。

属性

属性: 功能:
Interactable 该组件将会接受输入吗? 看到Interactable
过渡 属性,确定控制视觉响应用户操作的方式。 看到过渡的选择
导航 属性确定的顺序控制。 看到导航选项
模板 的矩形变换下拉列表的模板。 请参阅下面的说明。
标题文本 文本组件把当前选中的文本选项。 (可选)
标题图片 图像组件当前选中的选项的形象。 (可选)
项文本 文本组件条目的文本。 (可选)
项目形象 图像组件项目的形象。 (可选)
价值 当前选中的索引选项。 0是第一选择,1是第二步,等等。
选项 可能的选项的列表。 一个文本字符串,并为每个选项可以指定一个图像。

事件

属性: 功能:
价值变化 一个UnityEvent当调用一个用户点击下拉列表中的选项之一。

细节

选项列表中指定的检查员或从代码可以分配。 对于每一个选项可以指定一个文本字符串,并选择一个图像,如果设置下拉来支持它。

按钮有一个单独的事件价值变化响应当用户完成点击列表中的选项之一。 它支持发送一个整数数字值的索引选择选项。 0是第一选择,1是第二步,等等。

模板系统

下拉控制的目的是有个孩子GameObject作为模板时显示的下拉列表中单击下拉控制。 模板GameObject默认是不活跃的,但可以活跃在编辑模板更好地看到发生了什么。 参考模板对象必须在模板中指定属性下拉菜单的组件。

模板必须有一个单项与切换组件。 当创建实际的下拉列表中单击下拉控制,这一项是重复多次,一份用于每个选项在列表中。 父项目的自动调整大小所以它可以适用于所有里面的物品。

A simple dropdown setup where the item is an immediate child of the template.一个简单的下拉菜单设置项在哪里的直接子模板。A more advanced dropdown setup that includes a scrollview that enables scrolling when there are many options in the list.更高级的下拉菜单设置,其中包括滚动视图,使滚动当有许多选项列表中。

模板可以在许多不同的方式设置。 安装使用的UI GameObject > >下拉菜单项包括滚动视图,这样如果有太多选项显示,会出现一个滚动条,用户可以滚动选项。 这不过不是一个强制性的模板设置的一部分。

(有关更多信息,请参见ScrollRect页面设置滚动视图)。

设置文本和图像的支持

下拉支持一个文本内容和一个图像内容对每个选项。 文本和图像是可选的。 他们只能使用如果设置下拉来支持它。

每个选项的下拉支持文本的标题文本和文本项属性都设置。 这些都是默认设置,当UI使用GameObject > >下拉菜单项。

  • 标题文本的文本组件保存文本是当前选中的选项。 下拉GameObject通常是一个孩子。
  • 项目文本是文本组件每个选择的文本。 项目GameObject通常是一个孩子。

每个选项的下拉支持一个图像时,标题图片和项目形象属性都设置。 这些都不是默认设置。

  • 标题图像的图像组件来保存图像当前选中的选项。 下拉GameObject通常是一个孩子。
  • 项目形象的图像组件来保存图像的每个选项。 项目GameObject通常是一个孩子。

实际的文本和图像用于指定下拉选项下拉组件的属性,或者可以设置代码。

位置的下拉列表

的位置下拉列表的下拉控制是由锚定主的矩形变换的模板。

默认情况下,将出现以下控制列表。 这是通过锚定模板底部的控制。 模板的主也需要在顶部,这样的模板是exapanded容纳数量可变的选择项,它只向下扩展。

下拉控制简单的逻辑来防止,下拉显示在画布的范围之外,因为这将使它不可能选择某些选项。 如果下拉在其默认位置没有完全在画布上矩形,其位置与控制是逆转。 例如,列表如下所示控制默认将显示上面。

这个逻辑非常简单,有一定的局限性。 下拉模板需要不超过一半的画布大小-下拉控件的大小,否则可能没有房间在位置如果下拉列表控件放置在中间的画布。

Unity3d 制作聊天框

阅读数 134

没有更多推荐了,返回首页