Я пытаюсь создать модификацию примера приложения размещения Энди в ARCore, отображая только одну плоскость вместо всех обнаруженных плоскостей.Я хотел бы добиться этого, нажав на самолет, который будет оказан.Вот что я попробовал.
protected override void OnEndManipulation(TapGesture gesture)
{
if (gesture.WasCancelled)
{
return;
}
// If gesture is targeting an existing object we are done.
if (gesture.TargetObject != null)
{
return;
}
// Raycast against the location the player touched to search for planes.
TrackableHit hit;
TrackableHitFlags raycastFilter = TrackableHitFlags.PlaneWithinInfinity | TrackableHitFlags.PlaneWithinPolygon;
if (Frame.Raycast(gesture.StartPosition.x, gesture.StartPosition.y, raycastFilter, out hit))
{
Debug.Log("Entered into hit if condition");
// Use hit pose and camera pose to check if hittest is from the
// back of the plane, if it is, no need to create the anchor.
if ((hit.Trackable is DetectedPlane) &&
Vector3.Dot(FirstPersonCamera.transform.position - hit.Pose.position,
hit.Pose.rotation * Vector3.up) < 0)
{
//var andyObject = Instantiate(AndyPrefab, hit.Pose.position, hit.Pose.rotation);
Debug.Log("Hit at back of the current DetectedPlane");
}
else
{
if (PlaneFixed is false)
{
foreach (GameObject plane in DetectedPlaneGenerator.instance.PLANES) //RK
{
// THE PROBLEM IS HERE! HOW TO GET CORRECT TYPECAST?
if (hit.Trackable is plane)
{
Debug.Log("Plane Selected");
PlaneFixed = true;
FixPositionButton.gameObject.SetActive(true);
}
else
{
plane.SetActive(false);
}
}
}
}
}
}
Проблема в том, что я не могу получить правильное соответствие между GameObject (PLANES - созданным в DetectedPlaneGenerator.cs) и объектом DetectedPlane (возвращаемым при попадании.Отслеживается с использованием лучевых фильтров PlaneWithinInfinity | PlaneWithinPolygon).
Я также видел способ попытаться связать «тег» с DetectedPlaneVisualizer ( решение для этого ).Тем не менее, я вижу, что это также касается самолетов, использующих GameObject.Как сопоставить GameObject и Hit.Trackable (объект DetectedPlane), чтобы определить, какая конкретная плоскость была только что нажата?