using UnityEngine; using Vuforia; public class ActivateObjectOnThreeTargets : MonoBehaviour { public ObserverBehaviour ImageTarget1; public ObserverBehaviour ImageTarget2; public ObserverBehaviour ImageTarget3; public GameObject ObjectToActivate; public GameObject Object1; public GameObject Object2; public GameObject Object3; public float yOffset = 0.2f; public float distanceThreshold = 1.12f; private bool hasDisabledObjects = false; void Update() { bool isTracked1 = IsTracked(ImageTarget1); bool isTracked2 = IsTracked(ImageTarget2); bool isTracked3 = IsTracked(ImageTarget3); bool allTracked = isTracked1 && isTracked2 && isTracked3; float d12 = Vector3.Distance(ImageTarget1.transform.position, ImageTarget2.transform.position); float d13 = Vector3.Distance(ImageTarget1.transform.position, ImageTarget3.transform.position); float d23 = Vector3.Distance(ImageTarget2.transform.position, ImageTarget3.transform.position); float avgDistance = (d12 + d13 + d23) / 3f; bool isCloseEnough = avgDistance <= distanceThreshold; bool shouldActivate = allTracked && isCloseEnough; if (shouldActivate) { if (!hasDisabledObjects) { Object1.SetActive(false); Object2.SetActive(false); Object3.SetActive(false); hasDisabledObjects = true; } Vector3 midPos = (ImageTarget1.transform.position + ImageTarget2.transform.position + ImageTarget3.transform.position) / 3f; midPos.y += yOffset; ObjectToActivate.transform.position = midPos; } else { if (!ObjectToActivate.activeSelf && hasDisabledObjects) { Object1.SetActive(true); Object2.SetActive(true); Object3.SetActive(true); hasDisabledObjects = false; } } ObjectToActivate.SetActive(shouldActivate); } private bool IsTracked(ObserverBehaviour target) { return target != null && target.TargetStatus.Status == Status.TRACKED; } }