ARCore Unity: как запускать и останавливать обнаружение самолетов по команде?

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

Кто-нибудь знает, как я могу запускать и останавливать обнаружение самолета ARCore по команде?

Я создаю приложение в Unity.

Большое спасибо заранее!


person Josh Smith    schedule 23.01.2018    source источник


Ответы (2)


на ARPlaneVisualizer.cs есть этот код

    void OnEnable()
    {

        m_PlaneLayer = LayerMask.NameToLayer ("ARGameObject");
        ARInterface.planeAdded += PlaneAddedHandler;
        ARInterface.planeUpdated += PlaneUpdatedHandler;
        ARInterface.planeRemoved += PlaneRemovedHandler;
        HidePlane(true);
    }

    void OnDisable()
    {
        ARInterface.planeAdded -= PlaneAddedHandler;
        ARInterface.planeUpdated -= PlaneUpdatedHandler;
        ARInterface.planeRemoved -= PlaneRemovedHandler;
        HidePlane(false);
    }

вы можете использовать код OnEnable() для начала отслеживания и OnDisable() код для прекращения отслеживания.

person jat    schedule 08.02.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

person Akhil Gudimetla    schedule 29.06.2018