那不是我的名字:开始和进步

在过去的几天里,我一直在开发Studio 2 Introduction Diary(日记2)中提到的“ That’s Not My Name(那不是我的名字)”。

该项目的灵感来自JRPG游戏的视觉风格,其菜单和世界运动与《神奇宝贝》系列相似。 该项目本质上是一个步行模拟器,您可以在其中输入您的名字,首选和姓氏,每个字符都将您称为您的名字或姓氏,从而迫使屏幕晃动,直到最终的NPC道歉并以您的首选名字来提及您。 这样做的目的是表明被错误命名的名字有多烦人,以及如何繁琐且可能不得不一遍又一遍地重复您想要的名字。

项目键盘

键盘原型是我在Unity中创建并从未尝试过的第一个新事物。 我必须学习Unity布局网格,并要实现许多繁琐的键盘输入,因为玩家无法真正键入或单击屏幕键盘,这与早期的JRPG电子游戏类似,因为玩家无法进行移动。

以下是整个键盘脚本的脚本;

 公共类KeyboardInputField:MonoBehaviour { 
 公共静态KeyboardInputField实例; 
  //字符串名称变量 
公共字符串FirstName;
公共字符串MiddleName;
公共字符串姓氏;
  //输入字段的文本(作为变量) 
public Text InputField;
公共文本PlayerName;
  //名称提示的变量 
公共文本名称提示;
公共GameObject NamePromptObject;
  //可以跟踪名字,名字和姓氏 
public int NameSelection = 0;
  //跟踪初始名称输入和重复输入 
公共布尔InitalInput;
公共字符串RepeatFirstName;
公共字符串RepeatPreferredName;
公共字符串RepeatLastName;
  //使用它进行初始化 
无效唤醒()
{
实例=这个;
InitalInput = true;
  RepeatFirstName = PlayerPrefs.GetString(“名字”); 
RepeatPreferredName = PlayerPrefs.GetString(“中间名”);
RepeatLastName = PlayerPrefs.GetString(“姓氏”);
}

//每帧调用一次更新
无效更新()
{
PlayerName.text =“我的名字是“ +名字+”“ + MiddleName +”“ +姓氏;
TextPrompt();
PlayerNamePreview();
}
 公共无效PlayerNamePreview() 
{
如果(InitalInput == true)
{
PlayerName.text =“我的名字是“ +名字+”“ + MiddleName +”“ +姓氏;
}
 如果(InitalInput == false) 
{
PlayerName.text =“是的,我的名字是” + RepeatFirstName +“,但我更愿意通过” + MiddleName;
}
}
 公共无效的NameFields() 
{
打印(“大声笑”);
}
 公共无效NameField() 
{
//初始名称输入
如果(InitalInput == true)
{
// NameSelection = 0;
如果(NameSelection == 1)
{
NamePrompt.text =“中间名或首选名称…”; //比固定它更容易在此放置它(应该是选择2)
如果(InputField.text ==“”)
{
NameSelection-= 1;
}
其他
{
名字= InputField.text;
InputField.text =“”;
PlayerPrefs.SetString(“名字”,名字);
}
}
 如果(NameSelection == 2) 
{
NamePrompt.text =“姓氏…”; //更容易将其放在此处而不是对其进行修复(应为选择3)
如果(InputField.text ==“”)
{
NameSelection-= 1;
}
其他
{
MiddleName = InputField.text;
InputField.text =“”;
PlayerPrefs.SetString(“中间名”,MiddleName);
}
}
 如果(NameSelection == 3) 
{
NamePrompt.text =“请确认您的选择...”;
如果(InputField.text ==“”)
{
NameSelection-= 1;
}
其他
{
LastName = InputField.text;
InputField.text =“”;
PlayerPrefs.SetString(“姓氏”,姓氏);
}
}
}
/ *
//辅助名称输入
如果(InitalInput == false)
{
NameSelection = 0;
名字= RepeatFirstName;
LastName = RepeatLastName;
如果(NameSelection == 0)
{
NamePrompt.text =“中间名或首选名称…”; //比固定它更容易在此放置它(应该是选择2)
如果(InputField.text ==“”)
{
NameSelection-= 1;
}
其他
{
名字= InputField.text;
InputField.text =“”;

}
}
}
* /
}
 公共无效TextPrompt() 
{

如果(InputField.text.Length == 0)
{
NamePromptObject.SetActive(true);
}
 其他 
{
NamePromptObject.SetActive(false);
}
}
 公共无效UpdateInputField(字符串输入) 
{
如果(输入==“退格”)
{
InputField.text = InputField.text.Substring(0,InputField.text.Length — 1);
}
 其他 
{
InputField.text + =输入;
}
}
}

我承认,在其中根本不需要很多公共变量。 但是,其他脚本正在被引用,而公共变量对于键盘来说是必需的。 下面是注册并充当多脚本构造函数的代码块

 公共类KeyScript:MonoBehaviour { 
 公共静态KeyScript实例; 
public int NamePosition;
 公共无效Awake() 
{
实例=这个;
}
 公共无效KeyClicked() 
{
KeyboardInputField.Instance.UpdateInputField(gameObject.name);
}
 公共无效BackspaceClicked() 
{
KeyboardInputField.Instance.UpdateInputField(gameObject.name);
}
 公共无效ContinueClicked() 
{
KeyboardInputField.Instance.NameSelection + = 1;
KeyboardInputField.Instance.NameField();
KeyboardInputField.Instance.NameFields();
  } 
 公共无效ConfirmSelection() 
{
如果(NamePosition == 3)
{
Application.LoadLevel(“世界”);
}
}
 公共无效Update() 
{
NamePosition = KeyboardInputField.Instance.NameSelection;
}
}

在两个脚本中,我都有Public Static SCRIPTNAME Instance; 并通过执行此操作以及Instance = this;Awake() ,我可以通过在给定实例中执行SCRIPTNAME.Instance.VARIABLENAME来操纵变量并初始化类。

老实说,在过去的一周中,我在上一个项目中尚未完成的最高级的事情是屏幕键盘,以及将脚本附加到每个按键的乏味程度。 将来,我一定会更好地利用预制件来避免这样繁琐的任务,希望下周,我不会在类似任务上犯同样的错误。