62 lines
1.8 KiB
C#
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;
|
|
}
|
|
} |