130 lines
3.6 KiB
C#
130 lines
3.6 KiB
C#
// HangarTutorialUI.cs
|
|
// Zweck: Einfache Paging-UI im Hangar; per Input weiterklicken; blendet sich weich aus.
|
|
using System.Collections.Generic;
|
|
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class HangarTutorialUI : MonoBehaviour
|
|
{
|
|
[Header("UI")]
|
|
[SerializeField] private CanvasGroup canvasGroup; // Sichtbarkeit/Interaktion
|
|
[SerializeField] private TMP_Text bodyText; // Textfeld
|
|
|
|
[Header("Controls")]
|
|
[SerializeField] private InputActionReference advanceAction; // Eingabe zum Weiterklicken
|
|
|
|
[Header("Behaviour")]
|
|
[SerializeField] private bool startOnAwake = true; // direkt beim Laden starten
|
|
[SerializeField] private float fadeSpeed = 6f; // Fade-Out Geschwindigkeit
|
|
|
|
[TextArea(2, 4)]
|
|
[SerializeField]
|
|
private List<string> pages = new()
|
|
{
|
|
"Willkommen zu deiner <b>Mission</b>, Rekrut! Ich bin Solan, deine persönliche <b>KI</b> und unterstütze dich mit allem was du brauchst.",
|
|
"Wie du sicherlich schon mitbekommen hast, verschwinden die <b>Englischen Worte</b> auf dieser Welt...",
|
|
"Doch wir sind hier um sie zurückzuholen, damit die Englische Sprache nicht ausstirbt!",
|
|
"Lass uns keine Zeit verschwenden! Laufe mit dem <b>linken Stick</b> zu deinem <b>Schiff</b>.",
|
|
"Sobald du dort bist, drückst du den <b>rechten Trigger</b>, dann beame ich dich rein."
|
|
};
|
|
|
|
private int pageIndex = -1;
|
|
private bool visible;
|
|
|
|
private void Awake()
|
|
{
|
|
// Startzustand: versteckt
|
|
if (canvasGroup)
|
|
{
|
|
canvasGroup.alpha = 0f;
|
|
canvasGroup.interactable = false;
|
|
canvasGroup.blocksRaycasts = false;
|
|
}
|
|
}
|
|
|
|
private void Start()
|
|
{
|
|
if (startOnAwake) BeginTutorial();
|
|
}
|
|
|
|
private void OnEnable()
|
|
{
|
|
if (advanceAction != null)
|
|
{
|
|
advanceAction.action.performed += OnAdvance;
|
|
advanceAction.action.Enable();
|
|
}
|
|
}
|
|
|
|
private void OnDisable()
|
|
{
|
|
if (advanceAction != null)
|
|
{
|
|
advanceAction.action.performed -= OnAdvance;
|
|
advanceAction.action.Disable();
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (!canvasGroup) return;
|
|
|
|
// Einblenden sofort, Ausblenden per Fade
|
|
float target = visible ? 1f : 0f;
|
|
canvasGroup.alpha = Mathf.MoveTowards(canvasGroup.alpha, target, fadeSpeed * Time.deltaTime);
|
|
|
|
bool interactable = canvasGroup.alpha > 0.95f;
|
|
canvasGroup.interactable = interactable;
|
|
canvasGroup.blocksRaycasts = interactable;
|
|
}
|
|
|
|
/// <summary>Startet das Hangar-Tutorial (erste Seite direkt sichtbar).</summary>
|
|
public void BeginTutorial()
|
|
{
|
|
visible = true;
|
|
|
|
if (canvasGroup)
|
|
{
|
|
canvasGroup.alpha = 1f;
|
|
canvasGroup.interactable = true;
|
|
canvasGroup.blocksRaycasts = true;
|
|
}
|
|
|
|
pageIndex = -1;
|
|
ShowNextPage();
|
|
}
|
|
|
|
/// <summary>Schließt die UI (blendet aus).</summary>
|
|
public void CloseTutorial()
|
|
{
|
|
visible = false; // Update() fade-t aus
|
|
if (canvasGroup)
|
|
{
|
|
canvasGroup.interactable = false;
|
|
canvasGroup.blocksRaycasts = false;
|
|
}
|
|
pageIndex = -1;
|
|
}
|
|
|
|
private void OnAdvance(InputAction.CallbackContext _)
|
|
{
|
|
if (!visible) return;
|
|
ShowNextPage();
|
|
}
|
|
|
|
private void ShowNextPage()
|
|
{
|
|
pageIndex++;
|
|
|
|
if (pageIndex >= pages.Count)
|
|
{
|
|
// Ende: einfach verschwinden
|
|
CloseTutorial();
|
|
return;
|
|
}
|
|
|
|
if (bodyText) bodyText.text = pages[pageIndex];
|
|
}
|
|
}
|