草庐IT

unity 登录与注册界面(连接本地MySQL)实现

艾沅 2023-08-15 原文

unity 登入与注册界面(连接本地MySQL)实现

unity 登录与注册界面(连接本地MySQL)实现

首先unity连接到本地MySQL

1.先去MySQL下载好插件如下
dada.ll.

  1. 下完后将下面的压缩包解压找到如下组件放到unity新建的文件夹Plugins
    3.
  2. 做完后到MySQL创建一个数据库和表格如下

接下来搭建场景如下我用image做的注册和登入界面



记得加一个文本作为提示文本

写入代码挂在canvas上记得最后将两个组件托进去先给主代码

using MySql.Data.MySqlClient;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using UnityEngine;
using UnityEngine.UI;
using LitJson;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using UnityEngine.SceneManagement;

public class Account : MonoBehaviour
{
   
    
    //注册界面
    public GameObject registerbg;

    private InputField regisUsername;
    private InputField repassword;
    private Text hinttext1;
    //登入界面
    public GameObject singbg;
    private InputField UsernameInput;
    private InputField Password;
    private Text hinttext;//提示文本
    private string Password1;
    private string  username;
    
    private void Awake()
    {
    //获取登入界面输入组件
        UsernameInput = singbg.transform.Find("loginbg/ACCount/UsernameInput").GetComponent<InputField>();
        Password = singbg.transform.Find("loginbg/Password/PasswordInput").GetComponent<InputField>();
        //提示文本
        hinttext = singbg.transform.Find("hint").GetComponent<Text>();
        hinttext1= registerbg.transform.Find("hint1").GetComponent<Text>();
        //获取注册界面输入组件
        regisUsername = registerbg.transform.Find("loginbg/ACCount/UsernameInput").GetComponent<InputField>();
        repassword= registerbg.transform.Find("loginbg/Password/PasswordInput").GetComponent<InputField>();
    }

    
    void Start()
    {
        
        
    }
    //注册界面方法查找及注册方法
    private void regions(string[] str)
    {
        //将读取数据库的账号密码存入字典里面
        Dictionary<string, string> myDic = new Dictionary<string, string>();
        myDic.Clear();
        //连接数据库
        string connectStr = "server=localhost;port=3306;database=mygamedb;user=root;password=scyscy111;";
        //定义数据库连接对象,传递对象
        MySqlConnection conn = new MySqlConnection(connectStr); //并没有建立数据库连接
        //打开数据库
        conn.Open();
        //数据库连接成功
        Debug.Log("数据库" + "mygamedb" + "连接成功");

//执行Mysql语句并读取结果
        MySqlCommand myCommand = new MySqlCommand("select*from users", conn);
        MySqlDataReader reader = myCommand.ExecuteReader();
        //读取具体数据
        while (reader.Read())
        {
            string username = reader.GetString("username");
            string Password1 = reader.GetString("password");
            
            myDic.Add(username,Password1);
        }

        if (myDic.ContainsKey(str[0]))
        {
            hinttext1.text = "账号存在!请重新注册";
            
        }
        else
        {
            reader.Close();
            string strinsert="insert into users (username,password)values('"+str[0].ToString()+"','"+str[1].ToString()+"')";
            MySqlCommand cmd = new MySqlCommand(strinsert, conn);
            cmd.ExecuteNonQuery();
            hinttext1.text = "注册成功!";
            conn.Close();
            
        }
    }
   //登录界面方法查找是否存在
    private void Login(string[] str)
    {
        //将读取数据库的账号密码存入字典里面
        Dictionary<string, string> myDic = new Dictionary<string, string>();
        myDic.Clear();
        //连接数据库
        string connectStr = "server=localhost;port=3306;database=mygamedb;user=root;password=scyscy111;";
        //定义数据库连接对象,传递对象
        MySqlConnection conn = new MySqlConnection(connectStr); //并没有建立数据库连接
        //打开数据库
        conn.Open();
       //数据库连接成功
        Debug.Log("数据库" + "mygamedb" + "连接成功");

//执行Mysql语句并读取结果
        MySqlCommand myCommand = new MySqlCommand("select*from users", conn);
        MySqlDataReader reader = myCommand.ExecuteReader();
       
       
        //读取具体数据
        while (reader.Read())
        {
            string username = reader.GetString("username");
            string Password1 = reader.GetString("password");
            
           myDic.Add(username,Password1);
        }

        if (myDic.ContainsKey(str[0]))
        {
            string vale;
            if (myDic.TryGetValue(str[0], out vale))
            {
                if (vale==str[1])
                {
                    hinttext.text = "登入成功!";
                    SceneManager.LoadScene("Game");//跳转至主游戏界面自己新建一个游戏场景
                }
                else
                {
                    hinttext.text = "密码错误请重新输入!";
                    //最好可以写一个清空账号的功能
                    
                }
            }
        }
        else
        {
            hinttext.text = "账号不存在!请注册";
            
        }
        //关闭读取和连接数据库
        reader.Close();
        conn.Close();
       //下面是单实现账号
        // foreach (var item in user)
        // {
        //     if (pass.Contains(str[0]) )
        //     {
        //         SceneManager.LoadScene("Game");
        //        
        //         break;
        //     }
        //     else
        //     { reader.Close();
        //         
        //         hinttext.text = "未找到账号请注册";
        //        
        //         break;
        //         
        //     }
        // }
    }
//每一次返回的清空
    private void emptytex()
    {
        regisUsername.text = "";
        repassword.text = "";
        UsernameInput.text = "";
        Password.text = "";
        hinttext.text = "";
        hinttext1.text = "";
    }
    //组件直接的查询
    private void OnEnable()
    {
       
        //登入界面的代码实现
        List<Button> signButtonList = new List<Button>();//创建一个按钮的数列
        signButtonList.AddRange(singbg.GetComponentsInChildren<Button>());
        foreach (Button  button1 in signButtonList)
        {
            button1.onClick.AddListener(() =>
            {
                LoginWindowButtonClick(button1);
            });
        }
//注册界面实现
        List<Button> reButtonList = new List<Button>();
        reButtonList.AddRange(registerbg.GetComponentsInChildren<Button>());
        foreach (Button  button2 in reButtonList)
        {
            button2.onClick.AddListener(() =>
            {
                LoginWindowButtonClick(button2);
            });
        }

    }
    //模式管理场景的按钮点击事件
   
        private void LoginWindowButtonClick(Button sender)
          {
  
        switch (sender.name)
        {
           

            
                
               
          
            
            //注册界面注册按钮
            case "Rebutton":
            {
                
                Debug.Log("ok");
                username = regisUsername.text.Trim();
                Password1 = repassword.text.Trim();
                if (username == ""&& Password1=="")
                    
                {
                    hinttext1.text="用户的账号密码不能为空";
                   
                   
                }
                else
                {
                    regions(new string[] {username, Password1});//调用数据库的方法
                }
            } break;
            case "Back1":
            {
                
                singbg.SetActive(true);
               registerbg.SetActive(false);
               emptytex();
            }
                break;
            //登入界面登入按钮
            case "siginbutton":
            {
                singbg.SetActive(false);
                registerbg.SetActive(true);
            }break;
            case "logbutten":
            {
                Debug.Log("成功");
                username = UsernameInput.text.Trim();
               Password1 = Password.text.Trim();
                if (UsernameInput.text.Trim() == ""&&Password.text.Trim()=="")
                    
                {
                    hinttext.text="用户的账号密码不能为空,请注册";
                }
                else 
                {
                    Login(new string[] { username, Password1 });//调用数据库方法
                }
                
            }
           break;
            default:
                break;
        }
    }


}

单独提出来登入注册方法

不想写了看看能不能看懂不能留言下

void Start()
    {
        
        
    }
    //注册界面方法查找及注册方法
    private void regions(string[] str)
    {
        //将读取数据库的账号密码存入字典里面
        Dictionary<string, string> myDic = new Dictionary<string, string>();
        myDic.Clear();
        //连接数据库
        string connectStr = "server=localhost;port=3306;database=mygamedb;user=root;password=scyscy111;";
        //定义数据库连接对象,传递对象
        MySqlConnection conn = new MySqlConnection(connectStr); //并没有建立数据库连接
        //打开数据库
        conn.Open();
        //数据库连接成功
        Debug.Log("数据库" + "mygamedb" + "连接成功");

//执行Mysql语句并读取结果
        MySqlCommand myCommand = new MySqlCommand("select*from users", conn);
        MySqlDataReader reader = myCommand.ExecuteReader();
        //读取具体数据
        while (reader.Read())
        {
            string username = reader.GetString("username");
            string Password1 = reader.GetString("password");
            
            myDic.Add(username,Password1);
        }

        if (myDic.ContainsKey(str[0]))
        {
            hinttext1.text = "账号存在!请重新注册";
            
        }
        else
        {
            reader.Close();
            string strinsert="insert into users (username,password)values('"+str[0].ToString()+"','"+str[1].ToString()+"')";
            MySqlCommand cmd = new MySqlCommand(strinsert, conn);
            cmd.ExecuteNonQuery();
            hinttext1.text = "注册成功!";
            conn.Close();
            
        }
    }
   //登录界面方法查找是否存在
    private void Login(string[] str)
    {
        //将读取数据库的账号密码存入字典里面
        Dictionary<string, string> myDic = new Dictionary<string, string>();
        myDic.Clear();
        //连接数据库
        string connectStr = "server=localhost;port=3306;database=mygamedb;user=root;password=scyscy111;";
        //定义数据库连接对象,传递对象
        MySqlConnection conn = new MySqlConnection(connectStr); //并没有建立数据库连接
        //打开数据库
        conn.Open();
       //数据库连接成功
        Debug.Log("数据库" + "mygamedb" + "连接成功");

//执行Mysql语句并读取结果
        MySqlCommand myCommand = new MySqlCommand("select*from users", conn);
        MySqlDataReader reader = myCommand.ExecuteReader();
       
       
        //读取具体数据
        while (reader.Read())
        {
            string username = reader.GetString("username");
            string Password1 = reader.GetString("password");
            
           myDic.Add(username,Password1);
        }

        if (myDic.ContainsKey(str[0]))
        {
            string vale;
            if (myDic.TryGetValue(str[0], out vale))
            {
                if (vale==str[1])
                {
                    hinttext.text = "登入成功!";
                    SceneManager.LoadScene("Game");//跳转至主游戏界面自己新建一个游戏场景
                }
                else
                {
                    hinttext.text = "密码错误请重新输入!";
                    //最好可以写一个清空账号的功能
                    
                }
            }
        }
        else
        {
            hinttext.text = "账号不存在!请注册";
            
        }
        //关闭读取和连接数据库
        reader.Close();
        conn.Close();
       //下面是单实现账号
        // foreach (var item in user)
        // {
        //     if (pass.Contains(str[0]) )
        //     {
        //         SceneManager.LoadScene("Game");
        //        
        //         break;
        //     }
        //     else
        //     { reader.Close();
        //         
        //         hinttext.text = "未找到账号请注册";
        //        
        //         break;
        //         
        //     }
        // }
    }

有关unity 登录与注册界面(连接本地MySQL)实现的更多相关文章

  1. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  2. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  3. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  4. ruby - 无法在 60 秒内获得稳定的 Firefox 连接 (127.0.0.1 :7055) - 2

    我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类

  5. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  6. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  7. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  8. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

  9. unity---接入Admob - 2

    目录1.AdmobSDK下载地址2.将下载好的unityPackagesdk导入到unity里​编辑 3.解析依赖到项目中

  10. 使用canal同步MySQL数据到ES - 2

    文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co

随机推荐