Kil*_*ert 1 c# unity-game-engine
我在游戏中创建了一个键盘.我创建的游戏对象有10个按钮:0-9.玩家必须输入4位数代码才能打开门.一旦玩家输入第一个数字,它就会显示在键盘的屏幕上.
我已经完成了所有基本代码,但我确信我已经以非常低效的方式完成了这项工作.现在,我已将以下功能附加到我的一个键上,实际上是数字键1:
public void Key1() {
if (digit1entered == false) {
digit1 = 1;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("First digit entered");
digit1entered = true;
} else {
if (digit1entered == true && digit2entered == false) {
digit2 = 1;
digit2entered = true;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("2nd digit entered");
} else {
if (digit2entered == true && digit3entered == false) {
digit3 = 1;
digit3entered = true;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("3rd digit entered");
} else {
if (digit3entered == true && digit4entered == false) {
digit4 = 1;
digit4entered = true;
displaycode.text = digit1.ToString () + digit2.ToString () + digit3.ToString () + digit4.ToString ();
print ("4th digit entered");
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了使整个键盘工作,我需要创建9个以上的功能,每个功能都有2-0的更新值.这意味着我最终会得到10个相似的函数,除了它们输入的值.这是糟糕的编程,所以我该如何避免呢?哦,如果上面已经开始编程不好,欢迎所有提示;-)
这样做非常困难.你挑选了一个真正的挑战.
有这样的功能
public void UserClickedButtonNumbered(int digitNumber)
{
Debug.Log("that button name is " +digitNumber);
}
Run Code Online (Sandbox Code Playgroud)
在你的脚本中说出Complex.cs一些对象
有你的十个按钮.在Inspector中,拖动以连接...
请注意,您实际上可以键入一个数字 - 我输入"3".
所以你实际上在你的十个按钮上设置值"0"到"9".
{脚注.你不会在"真正的"项目中这样做,因为它是正交的,会导致设计人员麻烦.我会根据键盘位置或其他东西神奇地查找数字.但这是一个很好的开始!}
所以你实际连接
一旦你有了这个工作,请告诉我们,我们将找出下一部分!
接下来,您需要一个永远不会让字符串超过四个字符的函数.如果你在最后添加一个,它会切掉第一个.
(重要的是:你实际上是通过一个扩展来实现的,这是Unity编程的绝对核心.但它太过于一次解释了.当你有时间研究这个时)
大概你的功能是......
private string FourOnly(string s)
{
while (s.Length > 4 ) s = s.Substring(1);
return s;
}
Run Code Online (Sandbox Code Playgroud)
所以现在你可以这样做......
[System.NonSerialized] public string pin = "";
public void UserClickedButtonNumbered(int digitNumber)
{
Debug.Log("that button name is " +digitNumber);
pin = pin + digitNumber.ToString();
pin = FourOnly(pin);
Debug.Log("So far, the user entered: " +pin);
if ( pin == "1313" ) Debug.Log("code unlocked!");
}
Run Code Online (Sandbox Code Playgroud)
所以你真的完成了.
最后!您只想在四个"LED显示屏"中显示信息
你真的需要用UnityEvent做到这一点,这让它非常容易.(这里的教程.)但它一下子太多了,所以只需要制作一个非常简单的功能......
public Text led1; // Text, or whatever your digits are
public Text led2;
public Text led3;
public Text led4;
private void FixLEDs()
{
string show = pin + " "; // just add many spaces on the end
led1.text = show[0].ToString(); // "show[n]" is a char, not a string
led2.text = show[1].ToString();
led3.text = show[2].ToString();
led4.text = show[3].ToString();
}
Run Code Online (Sandbox Code Playgroud)
非常简单.所以每次用户触摸任何东西时都要调用它,
public void UserClickedButtonNumbered(int digitNumber)
{
pin = FourOnly( pin + digitNumber );
FixLEDs();
if ( pin == "1313" ) Debug.Log("code unlocked!");
}
Run Code Online (Sandbox Code Playgroud)
你完成了.去喝酒