Unity制作虚拟按键输入数字答案
1、层级结构
GameScene是Panel,其实就是一张灰白色的背景;1level-1就是灰色的背景;Text就是题目;InputField是输入框;input是一张盖住了输入框的全透明图片;input的子对象都是按钮。
注意这张input,需要盖住输入框,不然运行时点击输入框可以键盘输入。
2、代码
public Button btnDelete;
public Button btnQueren;
public Button[] btnCount;
public InputField field;
private GameObject WinPanel;
// Start is called before the first frame update
void Start()
{
WinPanel = GameObject.Find("Canvas/GameScene/WinPanel");
if (btnDelete) btnDelete.onClick.AddListener(ClickDeleteButton);
if (btnQueren) btnQueren.onClick.AddListener(ClickQuerenButton);
if (btnCount[0]) btnCount[0].onClick.AddListener(ClickCount0Button);
if (btnCount[1]) btnCount[1].onClick.AddListener(ClickCount1Button);
if (btnCount[2]) btnCount[2].onClick.AddListener(ClickCount2Button);
if (btnCount[3]) btnCount[3].onClick.AddListener(ClickCount3Button);
if (btnCount[4]) btnCount[4].onClick.AddListener(ClickCount4Button);
if (btnCount[5]) btnCount[5].onClick.AddListener(ClickCount5Button);
if (btnCount[6]) btnCount[6].onClick.AddListener(ClickCount6Button);
if (btnCount[7]) btnCount[7].onClick.AddListener(ClickCount7Button);
if (btnCount[8]) btnCount[8].onClick.AddListener(ClickCount8Button);
if (btnCount[9]) btnCount[9].onClick.AddListener(ClickCount9Button);
}
btnDelete:删除按键
btnQueren:确认按键
btnCount:数字按键
field:输入框
WinPanel:胜利面板
void ClickDeleteButton()
{
if(!field.text.Equals("")||field.text.Trim().Length!=0)
{
field.text = field.text.Remove(field.text.Trim().Length - 1, 1);
}
}
void ClickQuerenButton()
{
if (gameObject.name == "1level-1")
{
if (field.text.Equals("96"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if(gameObject.name == "1level-2")
{
if (field.text.Equals("72"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if (gameObject.name == "1level-3")
{
if (field.text.Equals("0"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if (gameObject.name == "1level-4")
{
if (field.text.Equals("2"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if (gameObject.name == "1level-5")
{
if (field.text.Equals("1200"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
}
ClickDeleteButton :删除按钮事件,注意判断输入框是否为空,删除字符的时候删除最后一个字符。
ClickQuerenButton :匹配答案的关键在Equals,判断对象名字是因为我做了多个关卡。
void ClickCount0Button()
{
field.text += "0";
}
void ClickCount1Button()
{
field.text += "1";
}
void ClickCount2Button()
{
field.text += "2";
}
void ClickCount3Button()
{
field.text += "3";
}
void ClickCount4Button()
{
field.text += "4";
}
void ClickCount5Button()
{
field.text += "5";
}
void ClickCount6Button()
{
field.text += "6";
}
void ClickCount7Button()
{
field.text += "7";
}
void ClickCount8Button()
{
field.text += "8";
}
void ClickCount9Button()
{
field.text += "9";
}
数字0~9的按键函数,注意字符串用+=来累加字符串。
3、最终效果:
4、进阶:
在此基础上,可以做多个框的删除和输入,代码直接放下面了,就是加多了一个关于字符长度的判断就可以了,我的判断长度是2。
public Button btnDelete;
public Button btnQueren;
public Button[] btnCount;
public InputField[] field;
private GameObject WinPanel;
// Start is called before the first frame update
void Start()
{
WinPanel = GameObject.Find("Canvas/GameScene/WinPanel");
if (btnDelete) btnDelete.onClick.AddListener(ClickDeleteButton);
if (btnQueren) btnQueren.onClick.AddListener(ClickQuerenButton);
if (btnCount[0]) btnCount[0].onClick.AddListener(ClickCount0Button);
if (btnCount[1]) btnCount[1].onClick.AddListener(ClickCount1Button);
if (btnCount[2]) btnCount[2].onClick.AddListener(ClickCount2Button);
if (btnCount[3]) btnCount[3].onClick.AddListener(ClickCount3Button);
if (btnCount[4]) btnCount[4].onClick.AddListener(ClickCount4Button);
if (btnCount[5]) btnCount[5].onClick.AddListener(ClickCount5Button);
if (btnCount[6]) btnCount[6].onClick.AddListener(ClickCount6Button);
if (btnCount[7]) btnCount[7].onClick.AddListener(ClickCount7Button);
if (btnCount[8]) btnCount[8].onClick.AddListener(ClickCount8Button);
if (btnCount[9]) btnCount[9].onClick.AddListener(ClickCount9Button);
}
void ClickDeleteButton()
{
if (!field[3].text.Equals("") || field[3].text.Trim().Length != 0)
{
field[3].text = field[3].text.Remove(field[3].text.Trim().Length - 1, 1);
}
else if(!field[2].text.Equals("") || field[2].text.Trim().Length != 0)
{
field[2].text = field[2].text.Remove(field[2].text.Trim().Length - 1, 1);
}
else if (!field[1].text.Equals("") || field[1].text.Trim().Length != 0)
{
field[1].text = field[1].text.Remove(field[1].text.Trim().Length - 1, 1);
}
else if (!field[0].text.Equals("") || field[0].text.Trim().Length != 0)
{
field[0].text = field[0].text.Remove(field[0].text.Trim().Length - 1, 1);
}
}
void ClickQuerenButton()
{
if (gameObject.name == "3level-1")
{
if (field[0].text.Equals("12")&& field[1].text.Equals("03")&& field[2].text.Equals("11")&& field[3].text.Equals("17"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if (gameObject.name == "3level-2")
{
if (field[0].text.Equals("19") && field[1].text.Equals("04") && field[2].text.Equals("15") && field[3].text.Equals("24"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
else if (gameObject.name == "3level-3")
{
if (field[0].text.Equals("26") && field[1].text.Equals("02") && field[2].text.Equals("10") && field[3].text.Equals("23"))
{
WinPanel.SetActive(true);
Debug.Log("恭喜过关!");
}
else
Debug.Log("答案错误!");
}
}
void ClickCount0Button()
{
if(field[0].text.Trim().Length<2)
field[0].text += "0";
else if(field[1].text.Trim().Length < 2)
field[1].text += "0";
else if (field[2].text.Trim().Length < 2)
field[2].text += "0";
else if (field[3].text.Trim().Length < 2)
field[3].text += "0";
}
void ClickCount1Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "1";
else if (field[1].text.Trim().Length < 2)
field[1].text += "1";
else if (field[2].text.Trim().Length < 2)
field[2].text += "1";
else if (field[3].text.Trim().Length < 2)
field[3].text += "1";
}
void ClickCount2Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "2";
else if (field[1].text.Trim().Length < 2)
field[1].text += "2";
else if (field[2].text.Trim().Length < 2)
field[2].text += "2";
else if (field[3].text.Trim().Length < 2)
field[3].text += "2";
}
void ClickCount3Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "3";
else if (field[1].text.Trim().Length < 2)
field[1].text += "3";
else if (field[2].text.Trim().Length < 2)
field[2].text += "3";
else if (field[3].text.Trim().Length < 2)
field[3].text += "3";
}
void ClickCount4Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "4";
else if (field[1].text.Trim().Length < 2)
field[1].text += "4";
else if (field[2].text.Trim().Length < 2)
field[2].text += "4";
else if (field[3].text.Trim().Length < 2)
field[3].text += "4";
}
void ClickCount5Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "5";
else if (field[1].text.Trim().Length < 2)
field[1].text += "5";
else if (field[2].text.Trim().Length < 2)
field[2].text += "5";
else if (field[3].text.Trim().Length < 2)
field[3].text += "5";
}
void ClickCount6Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "6";
else if (field[1].text.Trim().Length < 2)
field[1].text += "6";
else if (field[2].text.Trim().Length < 2)
field[2].text += "6";
else if (field[3].text.Trim().Length < 2)
field[3].text += "6";
}
void ClickCount7Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "7";
else if (field[1].text.Trim().Length < 2)
field[1].text += "7";
else if (field[2].text.Trim().Length < 2)
field[2].text += "7";
else if (field[3].text.Trim().Length < 2)
field[3].text += "7";
}
void ClickCount8Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "8";
else if (field[1].text.Trim().Length < 2)
field[1].text += "8";
else if (field[2].text.Trim().Length < 2)
field[2].text += "8";
else if (field[3].text.Trim().Length < 2)
field[3].text += "8";
}
void ClickCount9Button()
{
if (field[0].text.Trim().Length < 2)
field[0].text += "9";
else if (field[1].text.Trim().Length < 2)
field[1].text += "9";
else if (field[2].text.Trim().Length < 2)
field[2].text += "9";
else if (field[3].text.Trim().Length < 2)
field[3].text += "9";
}
最终效果:
(忽略我的按钮…)