Unity3D开发RPG游戏—注册操作和主角状态信息保存更新实现
登录操作BUG修复
在上篇的登录功能完成时,出现了问题:登录操作的原理为根据用户列表的txt文件遍历查找是否存在相关用户信息,存在则登录成功。但在测试中发现,只有txt文件第一行的用户信息可以被读出,即遍历和对比出现问题。编写的判断是否登录成功方法中返回值的为bool型,在遍历第一行数据时,若不符合,直接返回了false,不再遍历下面的内容,因此,在该函数开头新建一个bool型变量,只在循环体中,判断正确时,将其赋值为true,即可解决问题。
bool LoginGame(string User,string Pass)
{
bool IsOK = false;
string[] allUser = File.ReadAllLines(Application.dataPath + "/Date/UserList.txt");
for (int i = 0; i < allUser.Length; i++)
{
string[] Use = allUser[i].Split(':');
if (Use[0] == User)
{
//用户名正确
if (Use[1] == Pass)
{
//完全正确
IsOK = true;
}
}
}
return IsOK;
}
添加注册功能
注册功能原理即为在点击登录按钮时,已固定的格式,将输入框中的用户名和密码写入用户信息列表的txt文件中。因此只需在UI界面中再添加一个button,并在其属性栏On Click()中,把GameManage代码拖拽给它,再选择好点击注册按钮要运行的函数。
该函数的代码为:
public void OnRegisterButton()
{
if (string.IsNullOrEmpty(UserName.text))
{
UserNameTest.text = "用户名为空";
}
if (string.IsNullOrEmpty(PassWord.text))
{
PassWordTest.text = "密码为空";
}
else
{
string path = Application.dataPath + "/Date/UserList.txt";//文件存放路径,保证文件存在。
StreamWriter sw = new StreamWriter(path, true);
sw.WriteLine(UserName.text+":"+PassWord.text);
sw.Close();
}
}
注意,这里使用StreamWriter方法而不使用WriteAllLine,后者在选定已有文件的时候,写入时会直接覆盖数据。
主角状态保存和更新相关
UI界面
在界面中加入技能栏和角色头像,血条蓝条等级等UI要素。
值得一提的是,主角的血条和蓝条使用的是Slider控件,该控件可以通过更改其属性Value更改其显示的前景色显示的长短。后期通过更改这个数值实现掉血。
代码编写思路
首先要创建一个代码PlayerState.cs用于存储角色信息相关的变量(例如等级,血量,蓝量,经验值,金钱值,位置信息等)作为存档信息。
在GameManage代码中,登录成功后,添加代码,如果该用户是第一次登入游戏,创建该用户,该角色的状态信息,写入名为该用户名相同的txt中。再次登录时,登陆成功后,直接读出该信息并赋予其角色即可。如果游戏过程中角色升级,在代码PlayerState.cs中,编写好升级的相关属性数值变化规则,再重新写入数据即可。
具体代码和Unity中相关操作操作
在UI界面完成后,同样需要和上一篇一样,控制UI界面的显示问题,直接使用SetActive方法即可,记得要在GameManage中创建相关变量,并在Unity中拖拽相关UI模块赋值。
创建代码PlayerState.cs