Unity3D制作3dRPG游戏——登录系统

Unity3D制作3dRPG游戏——登录系统

目录

  • Unity3D制作3dRPG游戏——登录系统
  • 设定辅助摄像机(登录界面背景)
  • UI界面设计
  • 编写代码GameManage思路过程
  • 代码GameManage和实现登录操作

设定辅助摄像机(登录界面背景)

在unity中操作,复制一个原本指向主角的摄像机,把其身上挂载的上一步控制镜头的代码一出,选定一个位置,在菜单栏GameObject->Align with view。

UI界面设计


整体为一个Canvas
账号和密码两个输入框为UI–>Input Field,可进行设置初始提示文本,和输入后文本类型(例如设置密码栏输入时为“*******”)
登录按钮为Button
另外设置几个普通text用来显示提示信息(例如登录失败,账号密码不能为空等)

编写代码GameManage思路过程

首先注意添加需要的using语句,UI操作的using UnityEngine.UI和读取txt操作的using System.IO

确定使用MVC架构单例模式创建好构造函数。

声明主角的相关资源(控制主角和摄像机的显示)和登录操作所需的相关资源

编写一个重置函数,并在Start()中调用,即每次启动该项目都从重置函数中所写的情况开始运行。包括关闭主摄像机和主角的显示(利用SetActive(true/false)来改变相关变量)。

编写方法检测相关输入框中的内容,根据情况显示信息。

创建一个txt文件用来存放登录信息。

编写一个方法,遍历整个txt文档,并跟从输入框中得到的信息比对,比对正确即可完成登录。

编写登录成功函数,登录成功后,让辅助摄像机关闭,打开主摄像机和主角显示,方法和重置函数相同。

代码GameManage和实现登录操作

在unity中创建空物体重命名GameManage。

把代码GameManage.cs挂载给空物体GameManage。并把unity中相关变量的物体拖拽至代码中对应的地方。

在两个Input Field的属性列表中,把GameManage拖拽到On Value Changed()和On End Edit()中,分别选定好相对应的函数(用户名选择用户名相关的函数,密码选择密码相关的函数)。

在button的属性列表中,把GameManage拖拽到On Click()中,选定点击按钮进行运行的函数。

另外,为了使登录成功后,UI界面跟随辅助摄像机同时消失,在Canvas下新建一个Plane,把所有用到的UI元素全都放置在Plane下,在代码中加入控制Plane显示消失的语句(SetActive(true/false))。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.IO;

public class GameManage : MonoBehaviour
{
    #region 单例模式

    //MVC架构   单例模式
    public static GameManage Index;
    /// 
    /// 构造函数 
    /// 
    GameManage()//当这个代码出现的时候,首先运行这个函数
    {
        Index = this;
    }
    #endregion

    #region 关于主角的资源
    [Header("主摄像机")]
    //主摄像机
    public GameObject MainCame;
    [Header("角色")]
    //角色
    public GameObject Players;
    
    #endregion

    #region 关于登录
    [Header("登录相机")]
    //登录相机
    public GameObject LoginCame;
    //用户名输入
    public InputField UserName;
    //密码输入
    public InputField PassWord;
    //检测用户名
    public Text UserNameTest;
    //检测密码
    public Text PassWordTest;
    //登陆失败提示
    public Text FailTips;
    //登录界面
    public GameObject Login;

    #endregion

    // Start is called before the first frame update
    void Start()
    {
        Res();
    }

    // Update is called once per frame
    void Update()
    {

    }

    //复位函数
    private void Res()
    {
        //关闭主摄像机,关闭主角显示,打开从摄像机,显示UI界面
        MainCame.SetActive(false);
        Players.SetActive(false);
        LoginCame.SetActive(true);
        Login.SetActive(true);
    }

    public void OnChanged()
    {
        Debug.Log("我的值改变了");
    }

    public void OnUserEnd()
    {
        if (string.IsNullOrEmpty(UserName.text))
        {
            UserNameTest.text = "用户名不能为空";
        }
    }
    public void OnPassWordEnd()
    {
        if (string.IsNullOrEmpty(PassWord.text))
        {
            PassWordTest.text = "密码不能为空";
        }
    }

    //按下登录按钮
    public void OnLoginButton()
    {
        if(string.IsNullOrEmpty(UserName.text))
        {
            UserNameTest.text = "用户名为空";
        }
        
        if (string.IsNullOrEmpty(PassWord.text))
        {
            PassWordTest.text = "密码为空";
        }
        else
        {
            Debug.Log("您输入的账号是" + UserName.text + "/r您输入的密码是" + PassWord.text);
            //网络游戏本环节是想服务器请求登录,比较数据库中的账号密码是否匹配
            if (LoginGame(UserName.text, PassWord.text))
            {
                Debug.Log("登陆成功");
                LoginIsOK();
            }
            else
            {
                FailTips.text = "登陆失败";
                Debug.Log("登陆失败");
            }
        }
    }
    bool LoginGame(string User,string Pass)
    {
        //把txt中的信息读出穿个一个新的string变量
        string[] allUser = File.ReadAllLines(Application.dataPath + "/Date/UserList.txt");
        //遍历整个读取到的txt中的信息
        for (int i = 0; i < allUser.Length; i++)
            {
                string[] Use = allUser[i].Split(':');
                if (Use[0] == User)
                {
                    //用户名正确
                    if (Use[1] == Pass)
                    {
                        //完全正确
                        return true;
                    }
                    else
                    {
                        PassWordTest.text = "密码错误";
                        return false;
                    }
                }
                else
                {
                    UserNameTest.text = "用户名不存在";
                    return false;
                }
            }
           return false;
    }
    //登录成功
    void LoginIsOK()
    {
        //打开主摄像机,角色显示,关闭从摄像机和UI显示
        LoginCame.SetActive(false);
        MainCame.SetActive(true);
        Players.SetActive(true);
        Login.SetActive(false);
    }
}

Unity3D开发RPG游戏—登录操作的实现

你可能感兴趣的:(unity3d,c#)