Надо эт сделать! 3. Добавлен аккаунт администратора
	Данные аккаунта администратора генерируеюся и показываются при первом запуске
	При входе в аккаунт администратора доступны дополнительные функции (просмотр результатов и менеджер аккаунтов)
4. Создан менеджер аккаунтов
	Из режима администратора можно зайти в менеджер аккаунтов
	Можно создать новый аккаунт сгенерировать логин и пароль к нему. изменить логин и пароль. удалить аккаунт. 
	
	Вот что есть 
	using System.Collections.Generic;

public enum UserType
{
    User,
    Admin
}

[System.Serializable]
public class UserData
{
    public string username;
    public string password;
    public UserType role;

    public UserData(string username, string password, UserType role)
    {
        this.username = username;
        this.password = password;
        this.role = role;
    }
}

[System.Serializable]
public class UserDatabase
{
    public List<UserData> users = new List<UserData>();
}

using System;
using UnityEngine;
using UnityEngine.UI;
using System.Collections;
using System.IO;
using Michsky.MUIP;
using TMPro;

public class LocalAuthManager : MonoBehaviour
{
    public TMP_InputField usernameInput;
    public TMP_InputField passwordInput;
    public ButtonManager loginButton;
    public TMP_Text feedbackText;

    public ButtonManager projectButton;
    public ButtonManager accountManagerButton;
    
    private UserDatabase userDatabase;
    private string userDatabasePath;
    
    private static readonly string encryptionKey = "EncryptionKeyForUserData";
    
    void Start()
    {
        userDatabasePath = Path.Combine(Application.persistentDataPath, "users.dat");
        LoadUserDatabase();

        // Проверяем, есть ли уже администратор
        if (!AdminExists())
        {
            GenerateAdminAccount();
        }

        loginButton.onClick.AddListener(OnLoginButtonClicked);
    }

    void LoadUserDatabase()
    {
        if (File.Exists(userDatabasePath))
        {
            // Загрузка и расшифровка базы данных пользователей
            byte[] encryptedData = File.ReadAllBytes(userDatabasePath);
            string json = Encrypt.DecryptStringFromBytes_Aes(encryptedData, encryptionKey);
            userDatabase = JsonUtility.FromJson<UserDatabase>(json);
        }
        else
        {
            // Создаем новую базу данных, если файла не существует
            userDatabase = new UserDatabase();
        }
    }

    void SaveUserDatabase()
    {
        string json = JsonUtility.ToJson(userDatabase);
        byte[] encryptedData = Encrypt.EncryptStringToBytes_Aes(json, encryptionKey);
        File.WriteAllBytes(userDatabasePath, encryptedData);
    }

    bool AdminExists()
    {
        return userDatabase.users.Exists(user => user.role == UserType.Admin);
    }

    void GenerateAdminAccount()
    {
        string adminUsername = "admin"; // Вы можете сгенерировать случайный логин
        string adminPassword = Guid.NewGuid().ToString().Substring(0, 8); // Генерируем случайный пароль

        UserData adminUser = new UserData(adminUsername, adminPassword, UserType.Admin);
        userDatabase.users.Add(adminUser);
        SaveUserDatabase();

        // Показываем данные администратора пользователю
        feedbackText.text = $"Аккаунт администратора создан:\nЛогин: {adminUsername}\nПароль: {adminPassword}";
    }

    void OnLoginButtonClicked()
    {
        string enteredUsername = usernameInput.text;
        string enteredPassword = passwordInput.text;

        UserData foundUser = userDatabase.users.Find(user => user.username == enteredUsername && user.password == enteredPassword);

        if (foundUser != null)
        {
            LoginSuccess(foundUser);
        }
        else
        {
            feedbackText.text = "Неправильный логин или пароль.";
        }
    }
    
    public void LoginSuccess(UserData user)
    {
        feedbackText.text = $"Добро пожаловать, {user.username}!";

        if (user.role == UserType.Admin)
        {
            accountManagerButton.gameObject.SetActive(true);
        }

        projectButton.Interactable(true);
        loginButton.Interactable(false);
        usernameInput.text = "";
        passwordInput.text = "";
    }
}

using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

public class AccountManager : MonoBehaviour
{
    public TMP_InputField newUsernameInput;
    public TMP_InputField newPasswordInput;
    public Dropdown roleDropdown; // "admin" или "user"
    public Button createUserButton;

    private UserDatabase userDatabase;
    private string userDatabasePath;

    void Start()
    {
        userDatabasePath = Path.Combine(Application.persistentDataPath, "users.dat");
        LoadUserDatabase();

        createUserButton.onClick.AddListener(CreateNewUser);
    }

    void LoadUserDatabase()
    {
        // Аналогично предыдущему методу загрузки
    }

    void SaveUserDatabase()
    {
        // Аналогично предыдущему методу сохранения
    }

    void CreateNewUser()
    {
        string username = newUsernameInput.text;
        string password = newPasswordInput.text;
        string role = roleDropdown.options[roleDropdown.value].text;

        if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        {
            // Показать сообщение об ошибке
            return;
        }

        if (userDatabase.users.Exists(user => user.username == username))
        {
            // Показать сообщение, что пользователь уже существует
            return;
        }

        UserData newUser = new UserData(username, password, role);
        userDatabase.users.Add(newUser);
        SaveUserDatabase();

        // Обновить UI, показать сообщение об успешном создании
    }

    // Реализуйте методы для редактирования и удаления пользователей
    void EditUser(UserData user)
    {
        // Обновите информацию о пользователе
        SaveUserDatabase();
    }

    void DeleteUser(UserData user)
    {
        userDatabase.users.Remove(user);
        SaveUserDatabase();
    }
}








ваще не понял че за херню написал? почему дублирование кода ты хочешь делать! делай более универсальные методы без дублирования как профессионал. Спецификация скриптов Unity
Цель:
Создать эффективные и гибкие скрипты для Unity, которые упрощают управление и взаимодействие с элементами игры или приложения.

Принципы:

Модульность и структурированность:

Скрипты организованы в модули с четко определенными обязанностями, что упрощает их понимание, поддержку и повторное использование.
Явная связь между компонентами:

Используются структуры данных (например, классы, структуры) для явного связывания элементов интерфейса и логики, что упрощает настройку и взаимодействие между компонентами.
Удобство настройки:

Скрипты позволяют настраивать элементы через Инспектор Unity или другие средства настройки, что делает процесс более удобным и интуитивно понятным.
Гибкость и расширяемость:

Код написан так, чтобы легко расширять и модифицировать функциональность без необходимости значительных изменений в существующем коде.
Масштабируемость:

Скрипты поддерживают добавление новых элементов или функциональности, обеспечивая возможность масштабирования проекта.
Обработка ошибок и проверка:

Включены проверки и обработка ошибок для предотвращения сбоев и упрощения отладки.
Эффективность и производительность:

Оптимизировано использование ресурсов и производительности, учитывая особенности работы Unity и предполагаемые сценарии использования.

Документация и комментарии:

В коде используются комментарии для объяснения основных функций и логики, что упрощает понимание и сопровождение.
Ключевые компоненты:

Классы и методы: Определяют основные функциональные блоки и их поведение.
Публичные и приватные переменные: Используются для хранения данных и настройки элементов через Инспектор Unity.
События и обработчики: Реализуют взаимодействие и логику на основе действий пользователя или игровых событий.
Методы и функции: Выполняют конкретные задачи, такие как управление состоянием объектов, обработка ввода и другие операции.

Делай [Header("")] и [Tooltip("")] к переменным
Делай summary к каждой функции кастомной
Функция делате только что-то одно.
Скрипт делает только тчо-то одно. Принцип единственной ответственности. И еще пиши код полностью зачем мне писать за тебя чтото?