记录:Unity脚本的编写8.0

目录

  • 需求分析
  • 设计GUI
  • 包含账号和密码输入栏,包括登录和注册按键
  • 添加背景音乐
    • 编写脚本控制音乐
  • 退出按钮
    • 编写脚本
  • 背景图片
  • 完整代码

一个小demo,登录和注册的实现(包括GUI和数据库操控)

需求分析

自行设计GUI,要求
1.包含账号和密码输入栏,包括登录和注册按键
2.添加背景音乐,使用GUI控制音乐音量和开关
3.退出按钮
4.背景图片,可操控的文本对象用于提示登录是否成功

设计GUI

在这里插入图片描述
简单设计了一个GUI界面,包括了输入用户名密码,登录,注册,退出,控制音乐等功能,当然还有一些其他功能,这是为了拓展,先不实现,日后再实现功能

包含账号和密码输入栏,包括登录和注册按键

先添加好账号和密码输入栏,包括登录和注册按钮(当然,输入框也是不可或缺的)
连接好mysql后编写脚本控制实现登录和注册功能

public void login()
{
    username = inputField1.text;
    password = inputField2.text;
    //1.连接并打开数据库
     ConnectDB();
    //2.查找用户名和密码
    SelectDB(username);
    //3.关闭数据库
    Close();
    //4.对比用户名和密码
   CompareDB();
}
public void register()
{
    username = inputField1.text;
    password = inputField2.text;
    //1.连接并打开数据库
    ConnectDB();
    //2.查找用户名和密码
    SelectDB(username);
    //3.添加用户名和密码
    InsertDB(username,password);
    //4.关闭数据库
    Close ();
}
private int InsertDB(string n,string p)
{
    //写sql语句
    string strSql = "insert into qquser(QQUserId,QQPassword) values('" + n +"','" + p + "');";
    //使用MySqlCommand发送语句
    using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
    {
        //执行ExecuteNonQuery方法
        return mySqlCommand.ExecuteNonQuery();
    }
}
private void ConnectDB()
{
    sqlConnection = new MySqlConnection(strConn);
    try
    {           
        sqlConnection.Open();
        Debug.Log(sqlConnection.State);
    }catch (Exception)
    {
        
    }
}
private void SelectDB(string n)
{
    //写sql语句
    string strSql = "select * from qquser where QQUserId= '" + n + "';";
    //使用MySqlCommand发送语句
    using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
    {
        //执行ExecuteReader方法
        using (MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader())
        {
            //通过MySqlDataReader读取数据
            while (mySqlDataReader.Read())
            {
                usernameDB= mySqlDataReader.GetString(0);
                passwordDB= mySqlDataReader.GetString(1);
            }
        }
    }
}
private void Close()
{
    if (sqlConnection.State.ToString() == "open")
    {
        //操作数据库的最后一步
        sqlConnection.Close();
    }
}
    private void CompareDB()
    {
        if(username == usernameDB && password == passwordDB)
        {
            SceneManager.LoadScene(1);
            //方法的重载

            //tip.text= "登录成功";
        }
        else
        {
            tip.text = "登录失败";
        }
    }
}

同时还可以在提示栏提示是否登录成功

添加背景音乐

像之前说的一样,先导入音乐到unity中
在这里插入图片描述
给我们想要添加音乐的场景添加这个组件 Audio Source
在这里插入图片描述

编写脚本控制音乐

public class Login : MonoBehaviour
{
   
    //控制声音的Gui组件
    AudioSource ads;
    public Slider slider;
    public Toggle toggle;
    public Button button;
    void Start()
        {
        ads = GetComponent<AudioSource>();
        toggle.onValueChanged.AddListener(PlayMusic);
        slider.onValueChanged.AddListener(ChangeVolume);
        button.onClick.AddListener(QuitGAme);
        }
    
    private void QuitGAme()
    {
        Application.Quit();
    }
    private void ChangeVolume(float arg0)
    {
        ads.volume = arg0;
    }

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

}

在这里插入图片描述
记得在“音频剪辑”中选择想要的音乐,否则无法运行出想要的结果

退出按钮

既然可以打开或登录,那自然也可以退出

编写脚本

private void exit()
{
    //判断是否在编辑器模式下运行
    #if UNITY_EDITOR
    //如果是,就停止播放
    UnityEditor.EditorApplication.isPlaying = false;
    #else
    //如果不是,就退出应用
    Application.Quit();
    #endif
}

这样就可以实现退出的逻辑
当然,挂载脚本和选择对应的按钮等步骤是必不可少的,在此就不多做赘述

背景图片

添加背景图片只需要在unity中创建原始图像
在这里插入图片描述
并且在纹理中,可以自定义图片,像文中这样
在这里插入图片描述
至于显示登录成功与否的操作,在上面的登录注册中已经实现

完整代码

分为了两个脚本,可以自行操作

/**
 * 自行设计GUI,要求
 * 1.包含账号和密码输入栏,包括登录和注册按键
 * 2.添加背景音乐,使用GUI控制音乐音量和开关
 * 3.退出按钮
 * 4.背景图片,可操控的文本对象用于提示登录是否成功
 * **/

using System.Collections;
using UnityEngine;
//using UnityEngine.UIElements;
using System;
using UnityEngine.UI;

public class Login : MonoBehaviour
{
   
    //控制声音的Gui组件
    AudioSource ads;
    public Slider slider;
    public Toggle toggle;
    public Button button;
    void Start()
        {
        ads = GetComponent<AudioSource>();
        toggle.onValueChanged.AddListener(PlayMusic);
        slider.onValueChanged.AddListener(ChangeVolume);
        button.onClick.AddListener(QuitGAme);
        }
    
    private void QuitGAme()
    {
        Application.Quit();
    }
    private void ChangeVolume(float arg0)
    {
        ads.volume = arg0;
    }

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

}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using MySql.Data.MySqlClient;
using UnityEngine.UI;
using TMPro;
using System;
using Unity.VisualScripting;
using UnityEngine.UIElements;
using UnityEngine.SceneManagement;

public class Login1 : MonoBehaviour
{
    //创建GUI
    public TMP_InputField inputField1;
    public TMP_InputField inputField2;
    public UnityEngine.UI.Button button1;
    public UnityEngine.UI.Button button2;
    public UnityEngine.UI.Button button3;
    public UnityEngine.UI.Button button4;
    public Text tip;
    //创建数据库
    //服务器名称,端口号,数据库,用户名,密码,连接形式

    string strConn = "server =localhost;port=3306;database=qqdb;user=root;password=12345678;Charset=utf8";

    //创建Mysql连接器
    MySqlConnection sqlConnection;

    string username;
    string password;
    string usernameDB;
    string passwordDB;
    // Start is called before the first frame update
    void Start()
    {
        button1.onClick.AddListener(login);
        button2.onClick.AddListener(register);
    }

    private void exit()
    {
        //判断是否在编辑器模式下运行
        #if UNITY_EDITOR
        //如果是,就停止播放
        UnityEditor.EditorApplication.isPlaying = false;
        #else
        //如果不是,就退出应用
        Application.Quit();
        #endif
    }

    public void login()
    {
        username = inputField1.text;
        password = inputField2.text;
        //1.连接并打开数据库
         ConnectDB();
        //2.查找用户名和密码
        SelectDB(username);
        //3.关闭数据库
        Close();
        //4.对比用户名和密码
       CompareDB();
    }
    public void register()
    {
        username = inputField1.text;
        password = inputField2.text;
        //1.连接并打开数据库
        ConnectDB();
        //2.查找用户名和密码
        SelectDB(username);
        //3.添加用户名和密码
        InsertDB(username,password);
        //4.关闭数据库
        Close ();
    }

    private int InsertDB(string n,string p)
    {
        //写sql语句
        string strSql = "insert into qquser(QQUserId,QQPassword) values('" + n +"','" + p + "');";
        //使用MySqlCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
        {
            //执行ExecuteNonQuery方法
            return mySqlCommand.ExecuteNonQuery();
        }
    }

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

    private void Close()
    {
        if (sqlConnection.State.ToString() == "open")
        {
            //操作数据库的最后一步
            sqlConnection.Close();
        }
    }

    private void SelectDB(string n)
    {
        //写sql语句
        string strSql = "select * from qquser where QQUserId= '" + n + "';";
        //使用MySqlCommand发送语句
        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))
        {
            //执行ExecuteReader方法
            using (MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader())
            {
                //通过MySqlDataReader读取数据
                while (mySqlDataReader.Read())
                {
                    usernameDB= mySqlDataReader.GetString(0);
                    passwordDB= mySqlDataReader.GetString(1);
                }
            }
        }
    }

    private void CompareDB()
    {
        if(username == usernameDB && password == passwordDB)
        {
            SceneManager.LoadScene(1);
            //方法的重载

            //tip.text= "登录成功";
        }
        else
        {
            tip.text = "登录失败";
        }
    }
}

这样,一个在unity中实现了登录注册功能的GUI就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/199149.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择跨网数据摆渡系统时,你最关注的功能是哪些?

为什么要选择跨网数据摆渡系统呢&#xff1f;因为做了网络隔离后&#xff0c;要有数据交互。那为什么要做网络隔离呢&#xff1f;主要还是安全方面的考虑&#xff0c;一般有以下几个原因&#xff1a; 1、数据安全保护&#xff1a;对于一些重要数据&#xff0c;比如代码数据、隐…

CentOS 7 部署 MariaDB 的 2 种方法

有两种安装 MariaDB 服务器的方法。您可以安装 CentOS 7 存储库中可用的默认版本&#xff0c;也可以通过手动添加 MariaDB 存储库来安装最新版本。 如果安装过MariaDB或MySQL&#xff0c;使用以下命令彻底删除它们: yum remove mariadb* yum remove mysql* 方法一: 使用 Yum…

JavaScript基础—for语句、循环嵌套、、数组、操作数组、综合案例—根据数据生成柱形图、冒泡排序

版本说明 当前版本号[20231129]。 版本修改说明20231126初版20231129完善部分内容 目录 文章目录 版本说明目录JavaScript 基础第三天笔记for 语句for语句的基本使用循环嵌套倒三角九九乘法表 数组数组是什么&#xff1f;数组的基本使用定义数组和数组单元访问数组和数组索引…

组合设计模式

package com.jmj.pattern.combination;/*** 菜单组件&#xff0c;属于抽象根节点*/ public abstract class MenuComponent {//菜单组件的名称protected String name;//菜单组件的层级protected int level;//添加子菜单public void add(MenuComponent menuComponent) {throw new…

08-学成在线项目中统一异常处理的规范

项目中的异常处理 规范异常类型 在Service类的业务方法中有很多的参数合法性校验,当请求参数不合法的时候会抛出异常,但此时异常信息只会在控制台输出,前端界面并不会提示用户 实际开发中前端和后端需要做一些约定: 一般将错误提示信息统一以json格式返回给前端,以HTTP状态码…

统计元音字母c语言

以下是一个简单的C语言程序&#xff0c;用于统计一段文本中的元音字母数量&#xff1a; #include <stdio.h>#include <string.h>int main() { char str[1000]; int vowels 0; printf("请输入一段文本&#xff1a;\n"); fgets(str, siz…

蓝桥杯day02——Fizz Buzz

1、题目 给你一个整数 n &#xff0c;找出从 1 到 n 各个整数的 Fizz Buzz 表示&#xff0c;并用字符串数组 answer&#xff08;下标从 1 开始&#xff09;返回结果&#xff0c;其中&#xff1a; answer[i] "FizzBuzz" 如果 i 同时是 3 和 5 的倍数。answer[i] &…

ESP-Mesh-Lite 用户指南

ESP-MESH-LITE 本指南提供有关 Mesh-Lite 协议的介绍。 概述 ESP-MESH-LITE 是一套建立在 Wi-Fi 协议之上的网络协议。ESP-MESH-LITE 允许分布在大范围区域内&#xff08;室内和室外&#xff09;的大量设备&#xff08;下文称节点&#xff09;在同一个 WLAN&#xff08;无线…

工业园区重金属废水深度处理工程项目,稳定出水0.1mg/l

随着环保要求不断提高&#xff0c;工业废水处理已成为众多企业的必修课。然而在工业生产中&#xff0c;如何有效处理含有重金属的废水成为了一个关键的挑战。 重金属废水是指含有汞、铅、铜、镉、锌、镍等有毒有害物质的废水&#xff0c;来源于矿山开采、金属冶炼、电镀、印刷线…

2024年申报国自然项目基金撰写及技巧

随着社会经济发展和科技进步&#xff0c;基金项目对创新性的要求越来越高。申请人需要提出独特且有前瞻性的研究问题&#xff0c;具备突破性的科学思路和方法。因此&#xff0c;基金项目申请往往需要进行跨学科的技术融合。申请人需要与不同领域结合&#xff0c;形成多学科交叉…

20世纪30年代的大危机

背景 1929年9月&#xff0c;美国财政部部长安德鲁梅隆向公众保证“现在没有担心的理由&#xff0c;这一繁荣的高潮将会继续下去”。 当时流行的一首儿歌&#xff1a;“梅隆拉响汽笛&#xff0c;胡佛敲起钟&#xff0c;华尔街发出信号&#xff0c;美国往地狱里冲&#xff01;”…

Dropdown下拉菜单(antd-design组件库)简单用法和禁用菜单

1.Dropdown下拉菜单 向下弹出的列表。 2.何时使用 当页面上的操作命令过多时&#xff0c;用此组件可以收纳操作元素。点击或移入触点&#xff0c;会出现一个下拉菜单。可在列表中进行选择&#xff0c;并执行相应的命令。 用于收罗一组命令操作。 Select 用于选择&#xff0c;而…

西南科技大学信号与系统A实验三(线性连续时间系统的分析)

一、实验目的 1.掌握用 matlab 分析系统时间响应的方法 2.掌握用 matlab 分析系统频率响应的方法 3.掌握系统零、极点分布与系统稳定性关系 二、实验原理 1. 系统函数 H(s) 系统函数:系统零状态响应的拉氏变换与激励的拉氏变换之比. H(s)=R(s)/E(s) 在 matlab 中可采用…

geemap学习笔记016:获取图像的基本属性和描述性信息

前言 遥感数据中通常包含众多信息&#xff0c;例如图像获取的时间、云覆盖量、以及每个波段的最大值最小值等等。 1 导入库并显示地图 import ee import geemapMap geemap.Map() Map2 添加图像数据 centroid ee.Geometry.Point([-122.4439, 37.7538]) #创建一个点坐标lan…

java编程:数组代表着苹果期货在 9 天内的价格变化,其中第 n 个元素是苹果在第 n 天的 价格,你可以进行最多三次交易,设计算法,9 天内赚到最多的钱

1 题目 编程题&#xff1a;下面的数组代表着苹果期货在 9 天内的价格变化&#xff0c;其中第 n 个元素是苹果在第 n 天的 价格&#xff0c;你可以进行最多三次交易&#xff0c;设计一个算法&#xff0c;9 天内如何赚到最多的钱&#xff1f;价格数组&#xff1a; [8, 9, 2, 5, …

DS八大排序之直接插入排序和希尔排序

前言 我们前面几期介绍了线性和非线性的基本数据结构。例如顺序表、链表、栈和队列、二叉树等~&#xff01;本期和接下来的几期我们来详解介绍各个排序的概念、实现以及性能分析&#xff01; 本期内容 排序的概念以及其运用 常见的排序算法 直接插入排序 希尔排序 一、排序的…

Flutter开发type ‘Future<int>‘ is not a subtype of type ‘int‘ in type cast错误

文章目录 问题描述错误源码 问题分析解决方法修改后的代码 问题描述 今天有个同事调试flutter程序时报错&#xff0c;问我怎么解决&#xff0c;程序运行时报如下错误&#xff1a; type ‘Future’ is not a subtype of type ‘int’ in type cast 错误源码 int order Databas…

聚观早报 |红魔9 Pro开卖;真我GT5 Pro定档

【聚观365】11月29日消息 红魔9 Pro开卖 真我GT5 Pro定档 一加12镜头细节公布 Redmi K70 Pro将搭载夜枭算法 苹果Vision Pro头显下月量产 红魔9 Pro开卖 红魔电竞旗舰最新力作——红魔9 Pro系列正式发布。作为一款全能电竞旗舰&#xff0c;该机搭载了第三代骁龙8移动平台…

【九】linux下部署frp客户端服务端实践

linux下部署frp客户端服务端实践 简介&#xff1a; 今天有一个这样的需求&#xff0c;部署在公司内部局域网虚拟机上的服务需要在外网能够访问到&#xff0c;这不就是内网穿透的需求吗&#xff0c;之前通过路由器实现过&#xff0c;现在公司这块路由器不具备这个功能了&#x…

Java后端开发——JDBC(万字详解)

Java后端开发——JDBC&#xff08;万字详解&#xff09; 今日目标 掌握JDBC的的CRUD理解JDBC中各个对象的作用掌握Druid的使用 1&#xff0c;JDBC概述 在开发中我们使用的是java语言&#xff0c;那么势必要通过java语言操作数据库中的数据。这就是接下来要学习的JDBC。 1.1 …