2025-12-11 13:14:43 +01:00

54 lines
1.7 KiB
C#

// HoloPanel.cs
// Zweck: UI-Panel mit Scanlines (UV-Scroll + Puls-Alpha) für Holo-Optik.
using UnityEngine;
using UnityEngine.UI;
public class HoloPanel : MonoBehaviour
{
[SerializeField] private RawImage bg; // Hintergrundbild (Scanlines)
[Header("Scanline motion")]
[SerializeField] private Vector2 uvScroll = new Vector2(0f, -0.2f);
[SerializeField] private float uvTiling = 1.5f;
[Header("Pulse")]
[SerializeField] private float pulseSpeed = 1.6f;
[SerializeField, Range(0f, 1f)] private float minAlpha = 0.35f;
[SerializeField, Range(0f, 1f)] private float maxAlpha = 0.65f;
private RectTransform rt;
private Color baseColor;
private void Awake()
{
if (!bg) bg = GetComponent<RawImage>();
rt = GetComponent<RectTransform>();
baseColor = bg ? bg.color : Color.white;
// Kacheln erlauben
if (bg && bg.texture) bg.texture.wrapMode = TextureWrapMode.Repeat;
if (bg) bg.uvRect = new Rect(0, 0, uvTiling, uvTiling);
}
private void Update()
{
if (!bg) return;
// UV scrollen
var r = bg.uvRect;
float period = (uvTiling <= 0f) ? 1f : 1f / uvTiling;
r.x = Mathf.Repeat(r.x + uvScroll.x * Time.deltaTime, period);
r.y = Mathf.Repeat(r.y + uvScroll.y * Time.deltaTime, period);
bg.uvRect = r;
// Alpha-Puls
float t = 0.5f + 0.5f * Mathf.Sin(Time.time * pulseSpeed);
float a = Mathf.Lerp(minAlpha, maxAlpha, t);
var c = baseColor; c.a = a;
bg.color = c;
// Kleines Wabern
if (rt) rt.localEulerAngles = new Vector3(0, 0, Mathf.Sin(Time.time * 0.7f) * 1.2f);
}
}