70 lines
2.3 KiB
C#
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;
|
|
}
|
|
} |