Как остановить обнаружение самолета в ARCORE v1.2.0 - PullRequest
0 голосов
/ 27 июня 2018

Как я могу прекратить обнаружение самолетов в ARCORE v1.2.0, предоставив пользователю возможность остановить его, нажав любую кнопку или команду любого типа?

Ответы [ 3 ]

0 голосов
/ 28 июня 2018

Я предполагаю, что вы используете класс DetectedPlaneGenerator для обнаружения плоскостей, предоставленных в пакете GoogleARCore для единства.

В методе Update (): Следующий фрагмент кода отвечает за обнаружение плоскости и после создания префабов этой плоскости.

Session.GetTrackables<DetectedPlane>(m_NewPlanes, TrackableQueryFilter.New);

Используется DetectedPlane , который является одним из трех других отслеживаемых объектов для поиска самолетов с использованием метода GetTrackables .

Чтобы включить / отключить это обнаружение плоскости, просто установите проверку bool в Update (), и вы можете обработать ее любым способом, я добавил два новых метода, чтобы вы могли добавлять вызовы кнопок, чтобы включать и отключать ее.

bool search = false;

public void StartSearch()
{
    search = true;
}

public void StopSearch()
{
    search = false;
}

public void Update()
{
    // Check that motion tracking is tracking.
    if (Session.Status != SessionStatus.Tracking)
    {
        return;
    }

    if(search){
        Session.GetTrackables<DetectedPlane>(m_NewPlanes, TrackableQueryFilter.New);
        for (int i = 0; i < m_NewPlanes.Count; i++)
        {
            GameObject planeObject = Instantiate(DetectedPlanePrefab, Vector3.zero, Quaternion.identity, transform);
            planeObject.GetComponent<DetectedPlaneVisualizer>().Initialize(m_NewPlanes[i]);
        }
    }
}

Вы можете дополнительно обрабатывать planePrefabs, для которых создается экземпляр, отключая все дочерние объекты компонента, к которому присоединен этот скрипт, поскольку эти префабы создаются как его дочерние gameObjects.

0 голосов
/ 29 июня 2018

Изначально создайте bool для ограничения кода обнаружения поверхности и первоначально установите bool в true.

bool isSurfaceDetected = true;

if (isSurfaceDetected) {


            Session.GetTrackables<TrackedPlane> (_newPlanes, TrackableQueryFilter.New);

            // Iterate over planes found in this frame and instantiate corresponding GameObjects to visualize them.
            foreach (var curPlane in _newPlanes) {
                // Instantiate a plane visualization prefab and set it to track the new plane. The transform is set to
                // the origin with an identity rotation since the mesh for our prefab is updated in Unity World
                // coordinates.
                var planeObject = Instantiate (plane, Vector3.zero, Quaternion.identity,
                                      transform);
                planeObject.GetComponent<DetectedPlaneVisualizer> ().Initialize (curPlane);

                //              Debug.Log ("test....");

                // Apply a random color and grid rotation.
                //          planeObject.GetComponent<Renderer>().material.SetColor("_GridColor", new Color(Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f), Random.Range(0.0f, 1.0f)));
                //          planeObject.GetComponent<Renderer>().material.SetFloat("_UvRotation", Random.Range(0.0f, 360.0f));

                //

            }

Создайте кнопку остановки на холсте и прикрепите ниже метод

public void StopTrack()
    {
        // Make isSurfaceDetected to false to disable plane detection code
        isSurfaceDetected = false;
        // Tag DetectedPlaneVisualizer prefab to Plane(or anything else)
        GameObject[] anyName = GameObject.FindGameObjectsWithTag ("Plane");
        // In DetectedPlaneVisualizer we have multiple polygons so we need to loop and diable DetectedPlaneVisualizer script attatched to that prefab.
        for (int i = 0; i < anyName.Length; i++) 
        {
            anyName[i].GetComponent<DetectedPlaneVisualizer> ().enabled = false;
        }

    }

Убедитесь, что метод кнопки остановки используется в ARController

0 голосов
/ 28 июня 2018

Вы можете сделать это, отключив префаб генератора самолетов или любой другой префаб, который вы используете для обнаружения и визуализации этих плоскостей. При нажатии кнопки установите активное состояние GameObject на false, как это

DetectedPlanePrefab.setActive(false);

где DetectedPlanePrefab - это объект GameObject. Это самый простой метод, который я знаю.

...