54 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|