70 lines
2.2 KiB
C#
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;
|
|
}
|
|
}
|