Unity_1lab/1 laba/Assets/Scripts/PasswordManager.cs

87 lines
3.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<TextMeshPro>();
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<NotePickup>();
if (pickup == null)
{
pickup = note.AddComponent<NotePickup>();
}
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 не присвоена!");
}
}
}