using UnityEngine; using NavKeypad; using TMPro; public class PasswordManager : MonoBehaviour { [Header("Настройки пароля")] public int passwordLength = 4; // Длина пароля (4 цифры) public string correctPassword; // Здесь будет сгенерированный пароль (для keypad) [Header("Записки")] public GameObject notePrefab; // Prefab записки с TextMesh public Transform[] noteSpawnPoints; // Массив точек спавна (укажите в инспекторе 4 позиции в сцене) [Header("Ссылка на keypad")] public Keypad keypadScript; // Ссылка на скрипт Keypad.cs (присвойте в инспекторе) [Header("Настройки ориентации записок")] [SerializeField] private Vector3 noteRotation = new Vector3(0f, 180f, 0f); // Вращение для коррекции текста private void Start() { GeneratePassword(); SpawnNotes(); SetPasswordToKeypad(); } private void GeneratePassword() { correctPassword = ""; for (int i = 0; i < passwordLength; i++) { int randomDigit = Random.Range(0, 10); // Случайная цифра от 0 до 9 correctPassword += randomDigit.ToString(); } Debug.Log("Сгенерированный пароль: " + correctPassword); // Для теста, удалите в релизе } private void SpawnNotes() { if (noteSpawnPoints.Length != passwordLength) { Debug.LogError("Количество точек спавна должно быть равно длине пароля!"); return; } for (int i = 0; i < passwordLength; i++) { // Спавним записку с указанным вращением GameObject note = Instantiate(notePrefab, noteSpawnPoints[i].position, Quaternion.Euler(noteRotation)); // Находим компонент TextMeshPro на записке или её детях TextMeshPro textComponent = note.GetComponentInChildren(); if (textComponent != null) { textComponent.text = $"{i + 1}: {correctPassword[i]}"; // Устанавливаем текст "1: X" textComponent.enableWordWrapping = false; textComponent.alignment = TextAlignmentOptions.Center; } else { Debug.LogError($"На prefab'е записки ({note.name}) нет компонента TextMeshPro!"); } // Добавляем/настраиваем NotePickup NotePickup pickup = note.GetComponent(); if (pickup == null) { pickup = note.AddComponent(); } pickup.noteIndex = i + 1; // 1-4 pickup.digit = correctPassword[i]; // Цифра } } private void SetPasswordToKeypad() { if (keypadScript != null) { keypadScript.keypadCombo = int.Parse(correctPassword); // Устанавливаем пароль как int } else { Debug.LogError("Ссылка на Keypad не присвоена!"); } } }