using UnityEngine; using UnityEngine.UI; /// /// Deteksi kecerahan kamera secara real-time. /// Tampilkan/sembunyikan button senter otomatis berdasarkan brightness. /// public class LightDetector : MonoBehaviour { [Header("UI")] public GameObject flashlightButton; // drag button senter ke sini [Header("Pengaturan")] [Range(0f, 1f)] public float threshold = 0.15f; // di bawah nilai ini = gelap, button muncul public float checkInterval = 0.5f; // cek setiap berapa detik private WebCamTexture webCamTexture; private float timer = 0f; void Start() { // Sembunyikan button saat awal if (flashlightButton != null) flashlightButton.SetActive(false); // Gunakan kamera belakang WebCamDevice[] devices = WebCamTexture.devices; string backCamName = ""; foreach (var d in devices) { if (!d.isFrontFacing) { backCamName = d.name; break; } } webCamTexture = new WebCamTexture(backCamName, 64, 64, 15); // resolusi kecil = ringan webCamTexture.Play(); } void Update() { if (webCamTexture == null || !webCamTexture.isPlaying) return; timer += Time.deltaTime; if (timer < checkInterval) return; timer = 0f; float brightness = GetAverageBrightness(); bool isDark = brightness < threshold; if (flashlightButton != null) flashlightButton.SetActive(isDark); } float GetAverageBrightness() { Color32[] pixels = webCamTexture.GetPixels32(); if (pixels == null || pixels.Length == 0) return 1f; float total = 0f; int step = Mathf.Max(1, pixels.Length / 256); // sample sebagian pixel saja biar ringan int count = 0; for (int i = 0; i < pixels.Length; i += step) { Color32 c = pixels[i]; // luminance sederhana total += (c.r * 0.299f + c.g * 0.587f + c.b * 0.114f) / 255f; count++; } return count > 0 ? total / count : 1f; } void OnDestroy() { if (webCamTexture != null && webCamTexture.isPlaying) webCamTexture.Stop(); } }