Raihan_TugasAkhir/Assets/Script/membesar.cs

70 lines
2.3 KiB
C#

using UnityEngine;
using UnityEngine.EventSystems;
public class AnimasiTombol : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerDownHandler, IPointerUpHandler
{
[Header("Pengaturan Ukuran")]
[Tooltip("Ukuran saat disentuh/di-hover (contoh: 1.05 = 105%)")]
public float skalaMembesar = 1.05f; // Disarankan 1.05 saja agar tidak kedat-kedut
[Tooltip("Ukuran saat diklik/ditekan tahan (contoh: 0.95 = 95%)")]
public float skalaDitekan = 0.95f;
[Header("Pengaturan Animasi")]
[Tooltip("Seberapa cepat perubahan ukurannya")]
public float kecepatanAnimasi = 20f; // Dibuat lebih cepat sedikit agar lebih responsif
private Vector3 skalaAwal;
private Vector3 targetSkala;
// Variabel penanda agar logikanya tidak tabrakan
private bool sedangDitekan = false;
private bool sedangDiHover = false;
void Awake()
{
// Pindah dari Start ke Awake agar ukuran asli terekam SEBELUM ada interaksi apa pun
skalaAwal = transform.localScale;
targetSkala = skalaAwal;
}
void OnEnable()
{
// SANGAT PENTING: Mereset ukuran tiap kali panel/tombol baru dimunculkan
// Mencegah bug tombol tiba-tiba sudah membesar sendiri
transform.localScale = skalaAwal;
targetSkala = skalaAwal;
sedangDitekan = false;
sedangDiHover = false;
}
void Update()
{
// Pakai unscaledDeltaTime agar animasi tetap mulus walaupun layar sedang ngelag atau game di-pause
transform.localScale = Vector3.Lerp(transform.localScale, targetSkala, Time.unscaledDeltaTime * kecepatanAnimasi);
}
public void OnPointerEnter(PointerEventData eventData)
{
sedangDiHover = true;
if (!sedangDitekan) targetSkala = skalaAwal * skalaMembesar;
}
public void OnPointerExit(PointerEventData eventData)
{
sedangDiHover = false;
if (!sedangDitekan) targetSkala = skalaAwal;
}
public void OnPointerDown(PointerEventData eventData)
{
sedangDitekan = true;
targetSkala = skalaAwal * skalaDitekan;
}
public void OnPointerUp(PointerEventData eventData)
{
sedangDitekan = false;
// Cek posisi jari saat dilepas: masih di area tombol atau sudah meleset?
targetSkala = sedangDiHover ? (skalaAwal * skalaMembesar) : skalaAwal;
}
}