так короче давай объединим AccountManager и LocalAuthManager короче вся логика должна быть в одном скрипте типо бекенд а весь ui типо авторизация или ui по созданию аккаунтов отдельные скрипты вообще. понял? using System;
using System.IO;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// Класс для управления аккаунтами пользователей.
/// </summary>
public class AccountManager : StaticInstance<AccountManager>
{
    [Header("UI Elements")] [Tooltip("Поле ввода нового логина")] [SerializeField]
    private TMP_InputField newUsernameInputField;

    [Tooltip("Поле ввода нового пароля")] [SerializeField]
    private TMP_InputField newPasswordInputField;

    [Tooltip("Кнопка создания пользователя")] [SerializeField]
    private Button createUserButton;

    [Tooltip("Текст для отображения сообщений")] [SerializeField]
    private TMP_Text feedbackText;

    public UserDatabase userDatabase;
    private string userDatabasePath;
    private const string EncryptionKey = "EncryptionKeyForUserData";

    protected override void Awake()
    {
        base.Awake();
        Initialize();
    }

    /// <summary>
    /// Инициализация менеджера аккаунтов.
    /// </summary>
    private void Initialize()
    {
        userDatabasePath = Path.Combine(Application.persistentDataPath, "users.dat");
        LoadUserDatabase();

        createUserButton.onClick.AddListener(CreateNewUser);
        if (!AdminExists())
        {
            GenerateAdminAccount();
        }
    }
    
    
    /// <summary>
    /// Проверка наличия администратора в базе данных.
    /// </summary>
    /// <returns>Возвращает true, если администратор существует</returns>
    private bool AdminExists()
    {
        return userDatabase.Users.Any(user => user.Role == UserType.Admin);
    }

    /// <summary>
    /// Генерация учетной записи администратора при первом запуске.
    /// </summary>
    private 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}";
    }

    /// <summary>
    /// Создание нового пользователя.
    /// </summary>
    private void CreateNewUser()
    {
        string username = newUsernameInputField.text.Trim();
        string password = newPasswordInputField.text.Trim();

        if (string.IsNullOrEmpty(username) || string.IsNullOrEmpty(password))
        {
            feedbackText.text = "Логин и пароль не должны быть пустыми.";
            return;
        }

        if (UserExists(username))
        {
            feedbackText.text = "Пользователь с таким логином уже существует.";
            return;
        }

        UserData newUser = new UserData(username, password, UserType.User);
        userDatabase.Users.Add(newUser);
        SaveUserDatabase();

        feedbackText.text = $"Пользователь {username} успешно создан.";
        ClearInputFields();
    }

    /// <summary>
    /// Проверка существования пользователя по логину.
    /// </summary>
    /// <param name="username">Логин</param>
    /// <returns>Возвращает true, если пользователь уже существует</returns>
    private bool UserExists(string username)
    {
        return userDatabase.Users.Any(user => user.Username == username);
    }

    /// <summary>
    /// Очистка полей ввода.
    /// </summary>
    private void ClearInputFields()
    {
        newUsernameInputField.text = string.Empty;
        newPasswordInputField.text = string.Empty;
    }

    /// <summary>
    /// Загрузка базы данных пользователей.
    /// </summary>
    private 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();
        }
    }

    /// <summary>
    /// Сохранение базы данных пользователей.
    /// </summary>
    private void SaveUserDatabase()
    {
        string json = JsonUtility.ToJson(userDatabase);
        byte[] encryptedData = Encrypt.EncryptStringToBytes_Aes(json, EncryptionKey);
        File.WriteAllBytes(userDatabasePath, encryptedData);
    }
} using System;
using System.IO;
using System.Linq;
using TMPro;
using UnityEngine;
using UnityEngine.UI;

/// <summary>
/// Класс для управления локальной аутентификацией пользователей.
/// </summary>
public class LocalAuthManager : MonoBehaviour
{
    [Header("UI Elements")] [Tooltip("Поле ввода логина")] [SerializeField]
    private TMP_InputField usernameInputField;

    [Tooltip("Поле ввода пароля")] [SerializeField]
    private TMP_InputField passwordInputField;

    [Tooltip("Кнопка входа")] [SerializeField]
    private Button loginButton;

    [Tooltip("Текст для отображения сообщений пользователю")] [SerializeField]
    private TMP_Text feedbackText;

    [Header("Buttons")] [Tooltip("Кнопка перехода к проекту")] [SerializeField]
    private Button projectButton;

    [Tooltip("Кнопка открытия менеджера аккаунтов")] [SerializeField]
    private Button accountManagerButton;

    public UserData currentUser;
    
    private UserDatabase userDatabase;
    private string userDatabasePath;
    private const string EncryptionKey = "EncryptionKeyForUserData";

    private void Awake()
    {
        Initialize();
    }

    /// <summary>
    /// Инициализация менеджера аутентификации.
    /// </summary>
    private void Initialize()
    {
      

        loginButton.onClick.AddListener(HandleLogin);
        projectButton.interactable = false;
        accountManagerButton.gameObject.SetActive(false);
    }

    /// <summary>
    /// Обработка нажатия на кнопку "Войти".
    /// </summary>
    private void HandleLogin()
    {
        string username = usernameInputField.text.Trim();
        string password = passwordInputField.text.Trim();

        if (AuthenticateUser(username, password, out UserData user))
        {
            OnLoginSuccess(user);
        }
        else
        {
            feedbackText.text = "Неправильный логин или пароль.";
        }
    }

    /// <summary>
    /// Аутентификация пользователя по логину и паролю.
    /// </summary>
    /// <param name="username">Логин</param>
    /// <param name="password">Пароль</param>
    /// <param name="user">Найденный пользователь</param>
    /// <returns>Возвращает true, если пользователь найден и пароль верный</returns>
    private bool AuthenticateUser(string username, string password, out UserData user)
    {
        user = userDatabase.Users.FirstOrDefault(u => u.Username == username && u.Password == password);
        return user != null;
    }

    /// <summary>
    /// Действия при успешном входе пользователя.
    /// </summary>
    /// <param name="user">Данные пользователя</param>
    private void OnLoginSuccess(UserData user)
    {
        feedbackText.text = $"Добро пожаловать, {user.Username}!";

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

        projectButton.interactable = true;
        loginButton.interactable = false;
        usernameInputField.text = string.Empty;
        passwordInputField.text = string.Empty;
        currentUser = user;
    }
} а в скрипте с логико не должно быть ui штук