MIF_E31222823/Assets/SCRIPT/ActivateObjectOnTargetTrack...

70 lines
2.2 KiB
C#

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