MIF_E31230979/Assets/Scripts/HomePage/Bounce.cs

62 lines
1.8 KiB
C#

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;
}
}