最近的项目中发现,Unity中的GUI.TextField,GUI.PasswordField无法用于iphone发布。当使用以上两个东东后,在从xcode工程中发布时会报一堆警告,而程序在iphone上就会一直停留在unity loading界面上。
通过查找文档,发现unity可以调用iphone原生键盘,于是利用GUI.BUtton和iphone键盘配合,实现了密码框功能。
源代码如下:
1 using UnityEngine;
2 using System.Collections;
3
4 public class GUIFieldTest : MonoBehaviour {
5
6 /// <summary>
7 /// 实现了密码框功能,调用iphone键盘,输入的文字转换为*。
8 /// 作者:李志伟
9 /// </summary>
10
11 //真正的密码字符
12 public string inputStr = "";
13 private iPhoneKeyboard keyboard;
14 //按钮的样式
15 public GUIStyle passwordStyle;
16
17 // Use this for initialization
18 void Start () {
19
20 }
21
22 // Update is called once per frame
23 void Update () {
24 if (keyboard != null)
25 {
26 //当点击了iphone键盘上的done,键盘隐藏,取得输入值
27 if (keyboard.done)
28 {
29 keyboard.active = false;
30 inputStr = keyboard.text;
31 }
32 }
33 }
34
35
36 void OnGUI()
37 {
38 //输入区,利用按钮代替,增加GUIStyle,使其显示为输入框
39 if(GUI.Button (new Rect (100,100,200,20),PasswordField(inputStr ,"*"),passwordStyle))
40 {
41 //第一次点击输入区时,新建键盘
42 if (keyboard == null)
43 {
44 keyboard = new iPhoneKeyboard(inputStr,iPhoneKeyboardType.Default, true, false, true,false ,"please type your password");
45 }
46 //当键盘已激活时点击输入区,隐藏键盘
47 else if (keyboard != null && !keyboard.active)
48 {
49 keyboard.active = true;
50 }
51 //当键盘已创建并处于隐藏状态时,点击输入区,激活键盘
52 else if (keyboard != null && keyboard.active)
53 {
54 keyboard.active = false;
55 }
56 }
57 //键盘创建后,取得输入文字
58 if (keyboard != null)
59 inputStr = keyboard.text;
60
61
62 }
63
64 /// <summary>
65 /// 转换输入区文字为“*”或自定义字符
66 /// </summary>
67 /// <param name="password">iphone键盘输入的文字</param>
68 /// <param name="maskChar">用于替换文字的字符</param>
69 /// <returns></returns>
70 private string PasswordField(string password, string maskChar)
71 {
72 string passwordMask = "";
73 for (int i = 0; i < password.Length; i++)
74 {
75 passwordMask = passwordMask + maskChar;
76 }
77 return passwordMask;
78 }
79 }