MIF_E31230979/Assets/Scripts/TangkapSayur/MataMelirik.cs

79 lines
2.8 KiB
C#

using UnityEngine;
public class MataMelirik : MonoBehaviour
{
public Transform mataKiri;
public Transform mataKanan;
[Header("Pengaturan")]
public float radiusLirik = 20f; // Seberapa jauh bola mata bisa geser (dalam pixel/unit)
public float kecepatanLirik = 5f; // Kelenturan gerakan mata
private Vector3 posisiAwalKiri;
private Vector3 posisiAwalKanan;
void Start()
{
// Simpan posisi tengah mata biar tahu jalan pulang
posisiAwalKiri = mataKiri.localPosition;
posisiAwalKanan = mataKanan.localPosition;
}
void Update()
{
// 1. Cari objek terdekat yang jatuh (bisa Sayur atau JunkFood)
GameObject target = CariObjekTerdekat();
if (target != null)
{
// 2. Hitung arah dari mata ke sayur
LirikKe(mataKiri, posisiAwalKiri, target.transform.position);
LirikKe(mataKanan, posisiAwalKanan, target.transform.position);
}
else
{
// 3. Kalau nggak ada yang jatuh, mata balik ke tengah (tampang polos)
mataKiri.localPosition = Vector3.Lerp(mataKiri.localPosition, posisiAwalKiri, kecepatanLirik * Time.deltaTime);
mataKanan.localPosition = Vector3.Lerp(mataKanan.localPosition, posisiAwalKanan, kecepatanLirik * Time.deltaTime);
}
}
void LirikKe(Transform mata, Vector3 posisiAsal, Vector3 targetPos)
{
// Hitung arah ke target
Vector3 arah = targetPos - mata.position;
// Batasi jarak geser mata agar tidak keluar dari kelopak mata
Vector3 lirikPos = arah.normalized * radiusLirik;
// Gabungkan posisi awal dengan pergeseran (offset)
Vector3 hasilPos = posisiAsal + lirikPos;
// Gerakkan mata secara halus
mata.localPosition = Vector3.Lerp(mata.localPosition, hasilPos, kecepatanLirik * Time.deltaTime);
}
GameObject CariObjekTerdekat()
{
// Gabungkan pengecekan Sayur dan JunkFood
GameObject[] sayurs = GameObject.FindGameObjectsWithTag("Sayur");
GameObject[] junks = GameObject.FindGameObjectsWithTag("JunkFood");
GameObject terdekat = null;
float jarakTerpendek = Mathf.Infinity;
Vector3 posisiDino = transform.position;
// Cek Sayur
foreach (GameObject s in sayurs) {
float jarak = Vector3.Distance(posisiDino, s.transform.position);
if (jarak < jarakTerpendek) { jarakTerpendek = jarak; terdekat = s; }
}
// Cek JunkFood
foreach (GameObject j in junks) {
float jarak = Vector3.Distance(posisiDino, j.transform.position);
if (jarak < jarakTerpendek) { jarakTerpendek = jarak; terdekat = j; }
}
return terdekat;
}
}