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

该项目的灵感来自JRPG游戏的视觉风格,其菜单和世界运动与《神奇宝贝》系列相似。 该项目本质上是一个步行模拟器,您可以在其中输入您的名字,首选和姓氏,每个字符都将您称为您的名字或姓氏,从而迫使屏幕晃动,直到最终的NPC道歉并以您的首选名字来提及您。 这样做的目的是表明被错误命名的名字有多烦人,以及如何繁琐且可能不得不一遍又一遍地重复您想要的名字。
- 7个Pogoss para desenvolvedores de jogos
- 从哪里开始学习游戏音频实现
- 增加应用下载量的10种方法-Buildbox
- 一个月内有3万名用户,少于500欧元
- 开发人员日志— AVANT GARDE INVESTIGATE-#0.002 v1.06
键盘原型是我在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
来操纵变量并初始化类。
老实说,在过去的一周中,我在上一个项目中尚未完成的最高级的事情是屏幕键盘,以及将脚本附加到每个按键的乏味程度。 将来,我一定会更好地利用预制件来避免这样繁琐的任务,希望下周,我不会在类似任务上犯同样的错误。