Unity简单登录功能的实现(附资源包)

项目说明 (一共就用到一个脚本,带有项目默认账号(可以自定义),也有玩家登录过后存到本地的账号(注册过后才有))

添加场景的方法

脚本

cs 复制代码
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class LogManage : MonoBehaviour
{
    [Header("两个面板")]
    public GameObject loginPanel;//登录面板
    public GameObject registerPanel;//注册面板

    [Header("四个按钮")]
    public Button loginBtn;//登录按钮
    public Button goregisterBtn;//跳转到注册界面按钮
    public Button backBtn;//返回按钮
    public Button registerBtn;//注册按钮

    [Header("登录面板的两个输入框")]
    public InputField useridInput;//用id输入框
    public InputField passwordInput;//密码输入框

    [Header("注册面板的两个输入框")]
    public InputField setuseridInput;//设置id输入框
    public InputField setpasswordInput;//设置密码输入框
    //在场景中输入要跳转的场景的名字//不输入就不会跳转
    [SerializeField] private string Scenenameext;
    //登录画布//可以选择登录成功后影藏登录画布//默认情况登录成功影藏画布
    [SerializeField] private GameObject loginCanvas;
    //提示面板
    public GameObject tipPanel;
    void Start()
    {
        loginBtn.onClick.AddListener(Login);
        goregisterBtn.onClick.AddListener(goRegister);
        backBtn.onClick.AddListener(Back);
        registerBtn.onClick.AddListener(Register);
    }
    void Login()
    {
        string userid = useridInput.text;
        string password = passwordInput.text;
        // 使用 Resources.Load 来读取文件内容
        string filePathtext = "PlayerLogin/Login";
        TextAsset loginfile = Resources.Load<TextAsset>(filePathtext);
        //先查找默认账号有木有玩家的数据
        if (loginfile != null)
        {
            string str = loginfile.text;
            // 在这里可以添加逻辑验证 userid 和 password 是否与 str 相匹配
            string[] str1 = str.Split('\n');//第一次分割
            for (int i = 0; i < str1.Length; i++)
            {
                string[] str2 = str1[i].Split(':');
                if (str2[0] == userid && str2[1] == password)
                {
                    Debug.Log("登录成功!");
                    //****************登录成功的逻辑*****************
                    if (Scenenameext != "")
                    {
                        SceneManager.LoadScene(Scenenameext); //跳转到指定场景
                        Debug.Log("你还没有指定跳转场景!");
                    }
                    else //如果没设置跳转场景的名字默认影藏画布
                    {
                        loginCanvas.SetActive(false); //登录成功后影藏登录画布
                    }
                    break;
                }
                else if (str2[0] == userid && str2[1] != password) 
                {
                    Debug.Log("密码错误");
                    //提示面板的显示
                    tipPanel.SetActive(true);
                    tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "密码错误";
                    Invoke("closetip", 2f);
                    break;
                }
                else
                {
                    if (i == str1.Length - 1)
                    {
                        //这里遍历本地账号看有木有玩家
                        string content = "PlayerLogin";
                        string[] str3 = File.ReadAllLines(Application.persistentDataPath + "/" + content + "/" + "Login.txt");
                        for (int j = 0; j < str3.Length; j++)
                        {
                            string[] str4 = str3[j].Split(':');
                            if (str4[0] == userid && str4[1] == password)
                            {
                                Debug.Log("登录成功!");
                                //****************登录成功的逻辑*
                                if (Scenenameext != "")
                                {
                                    SceneManager.LoadScene(Scenenameext); //跳转到指定场景
                                    Debug.Log("你还没有指定跳转场景!");
                                }
                                else //如果没设置跳转场景的名字默认影藏画布
                                {
                                    loginCanvas.SetActive(false); //登录成功后影藏登录画布
                                }
                                break;
                            }
                            else if (str4[0] == userid && str4[1] != password)
                            {
                                Debug.Log("密码错误");
                                //提示面板的显示
                                tipPanel.SetActive(true);
                                tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "密码错误";
                                Invoke("closetip", 2f);
                                break;
                            }
                            else if(j== str3.Length-1)
                            {
                                Debug.Log("该账号不存在");
                                //提示面板的显示
                                tipPanel.SetActive(true);
                                tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "该账号不存在";
                                Invoke("closetip", 2f);
                            }
                        }
                    }
                }
            }
        }
        else
        {
            Debug.LogError("登录文件未找到!");
        }
    }
    void goRegister()
    {
        //跳转到注册界面
        loginPanel.SetActive(false);
        registerPanel.SetActive(true);
        //清空输入框
        setuseridInput.text = "";
        setpasswordInput.text = "";
    }
    void Back()
    {
        //返回登录界面
        loginPanel.SetActive(true);
        registerPanel.SetActive(false);
    }
    void Register()
    {
        //注册逻辑
        string userid = setuseridInput.text;
        string password = setpasswordInput.text;
        //判断是不是默认账号
        string filePathtext = "PlayerLogin/Login";
        TextAsset loginfile = Resources.Load<TextAsset>(filePathtext);
        //检测本地账号文本是否存在
        string content = "PlayerLogin";
        if (!File.Exists(Application.persistentDataPath + "/" + content + "/" + "Login.txt"))//路径存在后创建数据文本(如果没找到的话)
        {
            Directory.CreateDirectory(Application.persistentDataPath + "/" + content);//这是一个双重保险
            string filePath0 = Application.persistentDataPath + "/" + content + "/" + "Login.txt";//这里换成对应文件位置
            string content2 = "玩家账号:玩家密码"+"\n";
            File.WriteAllText(filePath0, content2);
            //Debug.Log("测试文本写入成功");
        }
        string str = loginfile.text;
        Debug.Log(str); // 输出文件内容
        //判断玩家注册的账号是不是默认账号
        string[] str1 = str.Split('\n');//第一次分割
        for (int i = 0; i < str1.Length; i++)
        {
            string[] str2 = str1[i].Split(':');
            if (str2[0] == userid)
            {
                Debug.Log("该账号已被注册!");
                //提示面板的显示
                tipPanel.SetActive(true);
                tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "该账号已被注册!";
                Invoke("closetip", 2f);
                break;
            }
            else if (i == str1.Length - 1)
            {
                //这里遍历本地账号看有木有玩家
                string[] str3 = File.ReadAllLines(Application.persistentDataPath + "/" + content + "/" + "Login.txt");
                for (int j = 0; j < str3.Length; j++)
                {
                    string[] str4 = str3[j].Split(':');
                    if (str4[0] == userid)
                    {
                        Debug.Log("该账号已被注册!");
                        //提示面板的显示
                        tipPanel.SetActive(true);
                        tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "该账号已被注册!";
                        Invoke("closetip", 2f);
                        break;
                    }
                    else if (j == str3.Length - 1)
                    {
                        //注册成功
                        Debug.Log("注册成功!");
                        //提示面板的显示
                        tipPanel.SetActive(true);
                        tipPanel.gameObject.transform.Find("Tipsimage/Tipstxt").GetComponent<Text>().text = "注册成功!";
                        Invoke("closetip", 2f);
                        //写入本地文件
                        string filePath = Application.persistentDataPath + "/" + content + "/" + "Login.txt";
                        string content1 = userid + ":" + password + "\n";
                        File.AppendAllText(filePath, content1);
                        Debug.Log("玩家数据写入成功");
                        //跳转到登录界面
                        loginPanel.SetActive(true);
                        //自动将账号和密码填进去
                        useridInput.text = setuseridInput.text;
                        passwordInput.text = setpasswordInput.text;
                        registerPanel.SetActive(false);
                        break;
                    }
                }
            }
        }
        
    }
    void closetip()
    {
        tipPanel.SetActive(false);
    }
}

资源包GitHub - laozhupeiqia/Simplelogin

相关推荐
海盗12342 小时前
微软技术周报 2026-08-31~09-07:GPT-6 Astra 登陆 Foundry、M365 全球认证故障复盘、C# 15 封闭层级
gpt·microsoft·c#
点心的游戏开发世界2 小时前
GDScript 入门笔记(十六):文件读写与数据持久化
开发语言·笔记·游戏引擎·godot
reasonsummer3 小时前
【办公类-115-01】20260906育儿知识(家园小报)批量制作(2026年9月-2027年6月)
开发语言·数据库·c#
点心的游戏开发世界3 小时前
GDScript 入门笔记(十三):字符串操作
开发语言·笔记·游戏引擎·godot
点心的游戏开发世界4 小时前
GDScript 入门笔记(十二):类型系统进阶
笔记·游戏引擎·godot
软件黑马王子4 小时前
13.缓存池优化:对象上限配置
开发语言·前端框架·c#
唐青枫4 小时前
C#.NET StructureMap 从依赖注入到项目实战
c#·.net
玖玥拾4 小时前
Lua 基础语法(三) 元表 metatable、元方法、模拟面向对象
开发语言·unity·lua
fujisheng6614 小时前
FUI 编译期装配实践:从反射注册到 Source Generator
c#·unity3d
智码看视界5 小时前
.NET 10 推理大模型TensorSharp 3.3.0 部署实测:纯.NET推理引擎反超llama.cpp 1.5倍,DFlash2提速62%
c#·.net·llama.cpp·.net 10·tensorsharp·本地大模型推理·开源推理引擎