// 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(); rt = GetComponent(); 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); } }