专栏首页Unity TechnologyJtro的技术分享:Unity中使用Sql数据库实现用户登录与注册

Jtro的技术分享:Unity中使用Sql数据库实现用户登录与注册

2017.10.21 用户登录功能使用十分普遍,现在要做的就是让用户输入用户名和密码,连接数据库,然后实现登录,这个版本只是一个使用本地数据库,现在我也只能做到登录的功能。注册的功能后续会了再加。-_-|| 2017.10.22 没想到这么快就把注册功能赶出来了,哈哈。。。。 直接把注册的代码放这里吧:

//用户注册确定按钮
    public void ConfirmBtn()
    {
        Debug.Log (ReginsterIDText .text);
        string s = "select ID from Works where ID = '" + ReginsterIDText .text + "'";
        if (ContainName  (ReginsterIDText .text)) {
            ResginsterState.text = "用户已经存在";
        } else {
            ResginsterState.text = "可以注册";
            Debug.Log ("没有这个人可以注册");
    string[] Colvalues = {ReginsterIDText .text ,ReginsterPasswordText .text };
        InsertValues ("Works",Colvalues);
        }

        Debug.Log ("用户注册确认按钮");
    }

注册的方法:说白了就是插入数据
protected void InsertValues (string tableName,string [] ColValues)
    {
        string queryString = "INSERT INTO " + tableName + " VALUES ('" + ColValues[0];
        for (int i = 1; i < ColValues.Length; i++) {
            queryString += "','" + ColValues [i];
        }
        queryString += "')";
        try {
            command.CommandText = queryString;
            command.ExecuteNonQuery ();
        } catch (System.Exception ex) {
            Debug.Log (ex);
        }
    }

好了,直接上工程吧,首先新建工程,名字什么的无所谓了。新建一个画布,在画布里面新建image、2个输入文本框,一个text 一个按钮。做完了之后如图所示:

新建成这样的.PNG

然后新建2个文件夹:Plugins和StreamingAssets.

Plugins文件夹里面导入Mono.Data.Sqlite文件,sqlite3文件,如果你的unity版本是5.5.0+的版本,还需要添加System.Data文件。

sqlite3文件:http://pan.baidu.com/s/1bpvsI4J

其他的两个文件都可以在Unity的安装文件夹中搜索到。

然后StreamingAssets文件夹中放的就是数据库文件了。首先数据库怎么建立呢?同样,分享一个建立数据库的软件:http://pan.baidu.com/s/1mhAtsTU 安装后打开这个软件,新建一个sql数据表。 里面包含用户名和密码。 设置好如图所示:

数据库表.PNG

保存你建立的数据库,回到unity中。

新建一个脚本,名为“denglu”这里把源码贴出,方便大家粘贴测试:

using UnityEngine;
using System.Collections;
using Mono.Data.Sqlite;
using UnityEngine.UI;
public class denglu : MonoBehaviour {

    //数据库连接对象,通过该对象与数据库文件所在的路径
    //进行连接,进而打开数据库文件
    SqliteConnection con;
    //数据库文件所在的路径
    string path;
    //数据库命令
    SqliteCommand command;

    SqliteDataReader reader;
    //以下是登录练习的成员数据
    public InputField input_name;
    public InputField input_pwd;
    public Text show;
    new string name;
    string pwd;
    object obj;

    void Start()
    {
        //要连接的数据库文件路径
        /* path = "Data Source = " + Application.streamingAssetsPath
        + "/shunity.sqlite";*/
        path = "Data Source = " + Application.streamingAssetsPath
            + "/User.sqlite";
        //通过路径创建出连接对象
        con = new SqliteConnection(path);
        //打开数据库文件
        con.Open();
        command = con.CreateCommand();
        //Test();
    }

    void Test()
    {
        #region 第一种执行方法,用在增/删/改
        //数据库语句
        //        command.CommandText = "insert into hero values('张三',10,20,1)";
        //该方法用在增/删/改语句
        //        int count = command.ExecuteNonQuery();

        #endregion
        #region 第二种执行方法,该方法用在查询结果只有一个的情况
        //        command.CommandText = "select *from hero";
        //        object obj = command.ExecuteScalar();
        //        Debug.Log(obj);
        #endregion
        #region 第三种方法
        command.CommandText = "select *from hero";
        reader = command.ExecuteReader();
        //如果读取了下一行,返回值为true,否则为false
        while (reader.Read())
        {
            //把每一行的每一列读取出来
            for (int i = 0; i < reader.FieldCount; i++)
            {
                Debug.Log(reader.GetName(i));
                //print(reader.GetValue(i).ToString() + " ");
            }
            print("\n");
        }
        #endregion
    }

    public void OnLoginClick()
    {
        if (ContainName() == false)
        {
            show.text = "你输入的名字不正确";
        }
        else if (CorrectPwd() == false)
        {
            show.text = "你输入的密码不正确";
        }
        else
        {
            show.text = "登录成功";

        }
    }

    bool ContainName()
    {
        name = input_name.text;
        command.CommandText = "select pwd from usertable where uname = '" + name + "'";
        obj = command.ExecuteScalar();
        if (obj != null)
        {
            return true;
        }
        else
        {
            return false;
        }
    }

    bool CorrectPwd()
    {
        pwd = input_pwd.text;
        if (ContainName())
        {
            if (pwd == obj.ToString())
            {
                return true;
            }
        }
        return false;
    }
}

保存后退出,新建一个空物体,把这个脚本挂上去,为里面的Ui赋值。 然后运行工程:

登录成功界面

登录失败的界面

好了,登录的就介绍到这里,过几天或者几个月再把注册写进来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Jtro的技术分享:Unity中读取PC的硬件信息

    这个功能似乎没有什么用,但是我在《c#入门到精通》这本书中看到这样的功能,在非unity开发的项目中,假如说你是一个纯c#软件开发者,这个你可以用来保护你的软件...

    LittleU
  • 数据结构与算法(五)

    大O记法是一个判断算法好坏的一个利器,但是在某些时候,虽然大O记法表现的是一样的,但是它们的速度一个要比另一个要快的多.

    LittleU
  • Jtro的源码分享:客户端通过服务器同步位置消息

    之前的源码讲过如何使用sql留言的功能,今天讲解两个客户端如何通过服务器来同步每个玩家的位置。 首先是服务器端,用到之前的异步socket的服务器了,如果没有...

    LittleU
  • AtCoder Regular Contest 069 D

    D - Menagerie ---- Time limit : 2sec / Memory limit : 256MB Score : 500 points P...

    Angel_Kitty
  • CVM上安装mongoDB之后设置外网连接遇到的坑与解决方案

    在腾讯云上购买了一台服务器之后,我准备用这台服务器来作为web服务器,各种基础准备都准备停当了,但是其中遇到了一个问题——安装的mongoDB在本地连接不上。各...

    xiaofu.qin
  • 1054: [HAOI2008]移动玩具

    1054: [HAOI2008]移动玩具 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1272  Solv...

    HansBug
  • 第五章 DHCP服务(2)

    DHCP服务中还支持保留IP的设置。保留ip就是讲一个ip绑定给某个网卡使用,那么该网卡只要连网即会使用这个ip,若该网卡不在线,DHCP也不会将这个ip分配给...

    晓天
  • Leetcode 14 Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of st...

    triplebee
  • 22:因子分解

    22:因子分解 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB描述 输入一个数,输出其素因子分解表达式。 输入输入一个整数...

    attack
  • 1043 输出PATest (20 分)

    给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种...

    可爱见见

扫码关注云+社区

领取腾讯云代金券

,,