实验1: 仿真系统的UI主界面设计

1.实验目的

(1)熟悉Unity中UI界面的设计与编写;

(2)熟悉UI界面中场景转换,UI与场景内容相互关联的方式。

(3)熟悉Unity中MySQL数据库的操作

2.实验内容

新建一个Unity场景,在此场景中实现如下功能:

(1)自行设计一个登录、注册UI界面;

(2)添加数据库的动态链接库文件,提前设计数据库表格(自行设计);

(3)连接数据库,实现增、删、改、查等数据库对用户的操作;

(4)UI界面中包括canvas、Image、RawImage、Button等多种UI元素;

(5)实现点击Play按钮转换场景,点击Exit退出游戏的功能;

(6)实现主界面添加音量滑动杆、静音等功能,添加背景音乐和音效音乐;

(7)为UI界面单独设置一个场景,并设置编号为0。

3.实验步骤

第一步:创建UI界面

(1)创建画布,附加背景

创建canvas作为画布,接着创建Raw Image和Image去实现基础背景的搭建

Unity中UI unity中ui界面设计_ui

 附加图片,并拖拽到和画布一样大小,背景设计完成。

(2)添加交互组件

首先添加InputField组件 作为我们的输入框,去实现账号密码框的设计

右键-->UI--->InputField

Unity中UI unity中ui界面设计_数据库_02

可以修改下面的TEXT去修改 输入框的默认内容

接着,添加Text 去搭建一个基本的登录框

Unity中UI unity中ui界面设计_Unity中UI_03

添加Button组件,设计登录,注册,退出按钮。

Unity中UI unity中ui界面设计_数据库_04

一个简易的登录注册页面完成

Unity中UI unity中ui界面设计_unity_05

接着,添加Dropdown,Toggle,Slider组件 进行排版得到完整的UI界面

Unity中UI unity中ui界面设计_数据库_06

第二步:实现交互功能

第四步,添加脚本代码实现功能

  1. 添加背景音乐,制作静音,调节音量功能

右键--->Audio  添加一个音乐组件

导入音乐素材,拖入Audio组件中

Unity中UI unity中ui界面设计_Unity中UI_07

添加脚本实现音量静音与控制

勾选toggle实现,静音

private void PlayMusic(bool arg0)
 {
if (arg0)
     {
         ads.Pause();
     }
else
     {
         ads.Play();
     }
 }

根据布尔值 判断是否勾选,如果勾选了静音按钮,就关闭音乐

拖动slider实现控制音量

private void ChangeVolume(float arg0)
 {
     ads.volume = arg0;
 }

2.连接数据库,实现登录注册功能

第一步:在官网下载插件MySQL Connector Net

下载安装完成后,添加数据库的动态链接库文件

Unity中UI unity中ui界面设计_游戏引擎_08

第二步:创建一个空对象,附加脚本实现连接

/*
 实现登录注册功能
登录:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码
Y = --->对比密码-->Y=-->关闭数据库--->登录成功
Y = --->对比密码-->N=-->关闭数据库--->登录失败
N = --->关闭数据库--->登录失败
注册:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码
Y =>关闭数据库 --->注册失败
N => 添加用户名密码--->关闭数据库--->注册成功
分解:
1.连接并打开数据库
2.查找用户名密码
3.关闭数据库
4.对比密码
5.添加用户名和密码
接口:登录1234 注册1235
对象:GUI对象 输入框*2 按钮*2,文本
     数据库:MySQLConnection,..Command...Reader
     字符串
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using MySql.Data.MySqlClient;
using System;
using UnityEngine.SceneManagement;

public class Component9 : MonoBehaviour
{
    public InputField inputField1;
    public InputField inputField2;
    public Button button1;
    public Button button2;
    public Text Tip;

    MySqlConnection sqlConnection;
    string strConn = "server=localhost;port=3306;Username=root;password=root;Database=2113042122wxh;charset=utf8;";

    string username;
    string password;
    string usernameDB;
    string passwordDB;


    // Start is called before the first frame update
    void Start()
    {
        button1.onClick.AddListener(Login);
    }
    public void Login()
    {
        username = inputField1.text;
        password = inputField2.text;

        ConnectDB();
        SelectDB(username);
        CloseDB();
        CompareDB(password);
    }

    private void CompareDB(string password)
    {
        if(username == usernameDB&&password == passwordDB)
        {
            SceneManager.LoadScene(1);
        }
        else
        {
            Tip.text = "登录失败";
        }
    }

    private void CloseDB()
    {
        if (sqlConnection.State.ToString() == "Open")
        {
            sqlConnection.Close();
            Debug.Log(sqlConnection.State);
        }
    }

    private Boolean SelectDB(String n)
    {
        string strSql = "select * from tb_user where username = '" + n + "';";
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
        {
            //执行ExecuteNonQuery()方法
            using (MySqlDataReader reader = mySqlCommand.ExecuteReader())
            {
                while (reader.Read())
                {
                    usernameDB = reader.GetString(1);
                    passwordDB = reader.GetString(2);
                    return true;
                }
            }
        }
        return false;
    }


    public void ConnectDB()
    {
        try
        {
            sqlConnection = new MySqlConnection(strConn);
            sqlConnection.Open();
            Debug.Log(sqlConnection.State);
        }
        catch (Exception)
        {

            throw;
        }
    }

    public void Register()
    {
        username = inputField1.text;
        password = inputField2.text;
        //连接打开数据库
        ConnectDB();
        //查找用户名密码
        if (SelectDB(username) == true)
        {
            Tip.text = "用户存在";
        }
        else
        {
            if (AddDB(username, password) == 1)
            {
                Tip.text = "添加成功";
            }
            else
            {
                Tip.text = "添加失败";
            }

        }

        CloseDB();

    }

    private int AddDB(string n, string p)
    {
        //写sql语句
        string strSql = "insert into tb_user(username,password) values ('" + n + "','" + p + "')";

        //创建MySQL对象
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
        {
            //执行ExecuteNonQuery()方法
            mySqlCommand.ExecuteNonQuery();
        }
        return 1;
    }
}

4.实验心得

省略