using UnityEngine; using Vuforia; using System.Collections.Generic; public class ActivateObjectOnTargetTracking : MonoBehaviour { [System.Serializable] public class MarkerCombination { public ObserverBehaviour marker1; public ObserverBehaviour marker2; public GameObject originalObject1; public GameObject originalObject2; public GameObject combinedObject; } public List combinations; public float yOffset = 0.2f; public float distanceThreshold = 2f; public GameObject plusIcon; // Ikon + private List hiddenOriginals = new List(); private bool IsTracked(ObserverBehaviour trackable) { return trackable != null && trackable.TargetStatus.Status == Status.TRACKED; } void Update() { hiddenOriginals.Clear(); List validCombos = new List(); bool showPlusIcon = false; Vector3 plusIconPosition = Vector3.zero; foreach (var combo in combinations) { if (combo.marker1 == null || combo.marker2 == null || combo.combinedObject == null) continue; bool isMarker1Tracked = IsTracked(combo.marker1); bool isMarker2Tracked = IsTracked(combo.marker2); if (isMarker1Tracked || isMarker2Tracked) { float distance = Vector3.Distance(combo.marker1.transform.position, combo.marker2.transform.position); bool isCloseEnough = distance <= distanceThreshold; if (isMarker1Tracked && isMarker2Tracked && isCloseEnough) { validCombos.Add(combo); } else if (isMarker1Tracked && isMarker2Tracked && !isCloseEnough) { // Jika marker terdeteksi dan berjauhan, tampilkan ikon + showPlusIcon = true; plusIconPosition = (combo.marker1.transform.position + combo.marker2.transform.position) / 2; plusIconPosition.y += yOffset; } } } // Nonaktifkan semua combinedObject terlebih dahulu foreach (var combo in combinations) { if (combo.combinedObject != null) combo.combinedObject.SetActive(false); } if (validCombos.Count > 0) { var combo = validCombos[0]; if (combo.originalObject1 != null) { combo.originalObject1.SetActive(false); hiddenOriginals.Add(combo.originalObject1); } if (combo.originalObject2 != null) { combo.originalObject2.SetActive(false); hiddenOriginals.Add(combo.originalObject2); } Vector3 midPosition = (combo.marker1.transform.position + combo.marker2.transform.position) / 2; midPosition.y += yOffset; combo.combinedObject.transform.position = midPosition; combo.combinedObject.SetActive(true); } // Tampilkan atau sembunyikan ikon + if (plusIcon != null) { plusIcon.SetActive(showPlusIcon); if (showPlusIcon) plusIcon.transform.position = plusIconPosition; } // Aktifkan kembali original objects jika tidak disembunyikan oleh kombinasi valid foreach (var combo in combinations) { if (combo.originalObject1 != null && !hiddenOriginals.Contains(combo.originalObject1) && IsTracked(combo.marker1)) combo.originalObject1.SetActive(true); if (combo.originalObject2 != null && !hiddenOriginals.Contains(combo.originalObject2) && IsTracked(combo.marker2)) combo.originalObject2.SetActive(true); } } }