using UnityEngine; using System.Collections; public class UniversalBounce : MonoBehaviour { public enum ModeEfek { SekaliJalan, TerusMenerus } [Header("Mode Animasi")] public ModeEfek mode = ModeEfek.SekaliJalan; [Header("Pengaturan Gerak")] public float kekuatan = 0.3f; // Besar kecilnya kenyal public float kecepatan = 8f; // Speed getaran public float durasiSekali = 1.5f; // Hanya dipakai jika mode SekaliJalan private Vector3 skalaAwal; void Start() { skalaAwal = transform.localScale; if (mode == ModeEfek.SekaliJalan) { StartCoroutine(EfekBounceSekali()); } } void Update() { // Jika modenya TerusMenerus, kita gunakan fungsi Update biar ngeloop terus if (mode == ModeEfek.TerusMenerus) { float sin = Mathf.Sin(Time.time * kecepatan) * kekuatan; // Terapkan efek kenyal looping float kenyalY = skalaAwal.y + sin; float kenyalX = skalaAwal.x - (sin * 0.5f); transform.localScale = new Vector3(kenyalX, kenyalY, skalaAwal.z); } } IEnumerator EfekBounceSekali() { float timer = 0; while (timer < durasiSekali) { timer += Time.deltaTime; // Efek mengecil (damping) agar berhenti perlahan float damping = Mathf.Lerp(1, 0, timer / durasiSekali); float sin = Mathf.Sin(timer * kecepatan) * kekuatan * damping; float kenyalY = skalaAwal.y + sin; float kenyalX = skalaAwal.x - (sin * 0.5f); transform.localScale = new Vector3(kenyalX, kenyalY, skalaAwal.z); yield return null; } transform.localScale = skalaAwal; } }