Пример #1
0
 public void SetupMapBuilder(SparseSpatialMapController mapControllerPrefab)
 {
     builderMapController                = UnityEngine.Object.Instantiate(mapControllerPrefab);
     builderMapController.SourceType     = SparseSpatialMapController.DataSource.MapBuilder;
     builderMapController.MapWorker      = MapWorker;
     builderMapController.ShowPointCloud = true;
 }
Пример #2
0
        void Start()
        {
            //界面控制
            panel = GameObject.Find("/Canvas/Panel");
            panel.transform.Find("ButtonClose").GetComponent <Button>().onClick.AddListener(() =>
            {
                HiddenPanel();
            });
            info = panel.transform.Find("Text").GetComponent <Text>();

            svContent  = panel.transform.Find("Scroll View/Viewport/Content");
            inputField = panel.transform.Find("InputField").GetComponent <InputField>();
            dropdown   = panel.transform.Find("Dropdown").GetComponent <Dropdown>();
            btnAdd     = panel.transform.Find("ButtonAdd").GetComponent <Button>();
            btnAdd.onClick.AddListener(AddKeyPoint);
            btnAdd.interactable = false;

            btnDelete = panel.transform.Find("ButtonDelete").GetComponent <Button>();
            btnDelete.onClick.AddListener(DeleteKeyPoint);
            btnDelete.interactable = false;

            panel.transform.Find("ButtonSave").GetComponent <Button>().onClick.AddListener(SaveKeyPoints);
            gameController = FindObjectOfType <GameController>();

            session   = FindObjectOfType <ARSession>();
            mapWorker = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
            map       = FindObjectOfType <SparseSpatialMapController>();

            LoadKeyPoints();
            HiddenPanel();
            LoadMap();
        }
Пример #3
0
 private void Awake()
 {
     //稀疏空间地图初始
     session    = FindObjectOfType <ARSession>();
     mapWorker  = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
     map        = FindObjectOfType <SparseSpatialMapController>();
     SavePanel  = GameObject.Find("MapName");
     inputField = SavePanel.transform.Find("Panel/InputField").GetComponent <InputField>();
     btnUpload  = SavePanel.transform.Find("Panel/Btn_Upload").GetComponent <Button>();
     btnSave    = GameObject.Find("Canvas/Map/Btn_SaveMap").GetComponent <Button>();
     //显示文本
     text = GameObject.Find("Canvas/Map/Text").GetComponent <Text>();
 }
Пример #4
0
        void Start()
        {
            gameController = FindObjectOfType <GameController>();
            panel          = GameObject.Find("/Canvas/Panel");
            btnNav         = GameObject.Find("/Canvas/ButtonNav").GetComponent <Button>();
            btnNav.onClick.AddListener(ShowNavUI);
            btnNav.interactable = false;
            panel.transform.Find("ButtonClose").GetComponent <Button>().onClick.AddListener(CloseNavUI);

            svContent = panel.transform.Find("Scroll View/Viewport/Content").transform;

            session   = FindObjectOfType <ARSession>();
            mapWorker = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
            map       = FindObjectOfType <SparseSpatialMapController>();

            SetLine();
            CloseNavUI();
            LoadMap();
        }
Пример #5
0
    void Start()
    {
        //稀疏空间地图初始
        session   = FindObjectOfType <ARSession>();
        mapWorker = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
        map       = FindObjectOfType <SparseSpatialMapController>();

        //如果之前有建立过地图且文本框没有预设值
        if (inputID.text.Length <= 0)
        {
            inputID.text   = PlayerPrefs.GetString("MapID", "");
            inputName.text = PlayerPrefs.GetString("MapName", "");
        }

        map.MapLoad         += MapLoadBack;     //注册地图加载事件
        map.MapLocalized    += LocalizedMap;    //注册定位成功事件
        map.MapStopLocalize += StopLocalizeMap; //注册停止定位事件

        StartLocalization();
    }
Пример #6
0
 void Start()
 {
     //保存按钮初始
     gameController = FindObjectOfType <GameController>();
     btnSave        = GameObject.Find("/Canvas/ButtonSave").GetComponent <Button>();
     btnSave.onClick.AddListener(Save);
     btnSave.interactable = false;
     //稀疏空间地图初始
     session   = FindObjectOfType <ARSession>();
     mapWorker = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
     map       = FindObjectOfType <SparseSpatialMapController>();
     //追踪状态设置
     session.WorldRootController.TrackingStatusChanged += OnTrackingStatusChanged;
     if (session.WorldRootController.TrackingStatus == MotionTrackingStatus.Tracking)
     {
         btnSave.interactable = true;
     }
     else
     {
         btnSave.interactable = false;
     }
 }
Пример #7
0
 void Start()
 {
     //稀疏空间地图初始
     session   = FindObjectOfType <ARSession>();
     mapWorker = FindObjectOfType <SparseSpatialMapWorkerFrameFilter>();
     map       = FindObjectOfType <SparseSpatialMapController>();
     //注册追踪状态变化事件
     session.WorldRootController.TrackingStatusChanged += OnTrackingStatusChanged;
     //初始化保存按钮
     btnSave = GameObject.Find("/Canvas/Button").GetComponent <Button>();
     btnSave.onClick.AddListener(Save);
     btnSave.interactable = false;
     if (session.WorldRootController.TrackingStatus == MotionTrackingStatus.Tracking)
     {
         btnSave.interactable = true;
     }
     else
     {
         btnSave.interactable = false;
     }
     //初始化显示文本
     text = GameObject.Find("/Canvas/Panel/Text").GetComponent <Text>();
 }
Пример #8
0
        public void LoadMapMeta(SparseSpatialMapController mapControllerPrefab, bool particleShow)
        {
            if (!MapWorker || MapWorker.Localizer == null)
            {
                return;
            }
            if (Maps.Count > 1)
            {
                MapWorker.LocalizerConfig.LocalizationMode = LocalizationMode.KeepUpdate;
            }

            foreach (var m in Maps)
            {
                var meta       = m.Meta;
                var controller = UnityEngine.Object.Instantiate(mapControllerPrefab);
                controller.SourceType       = SparseSpatialMapController.DataSource.MapManager;
                controller.MapManagerSource = meta.Map;
                controller.MapWorker        = MapWorker;
                controller.ShowPointCloud   = particleShow;
                controller.MapLoad         += (map, status, error) =>
                {
                    Debug.Log("\t定位中");
                    Debug.Log(
                        "\t下载信息:" +
                        "\t名称" + map.Name +
                        "\tID" + map.ID + Environment.NewLine);

                    CurrentMapLoad?.Invoke(m);

                    GUIPopup.EnqueueMessage("Load map {name = " + map.Name + ", id = " + map.ID + "} into " + MapWorker.name + Environment.NewLine +
                                            " => " + status + (string.IsNullOrEmpty(error) ? "" : " <" + error + ">"), status ? 3 : 5);
                    if (!status)
                    {
                        return;
                    }
                    GUIPopup.EnqueueMessage("Notice: By default (MainViewRecycleBinClearMapCacheOnly == false)," + Environment.NewLine +
                                            "load map will not trigger a download in this sample." + Environment.NewLine +
                                            "Map cache is used (SparseSpatialMapManager.clear not called alone)." + Environment.NewLine +
                                            "Statistical request count will not be increased (more details on EasyAR website).", 5);
                    foreach (var propInfo in meta.Props)
                    {
                        GameObject prop = null;
                        foreach (var templet in PropCollection.Instance.Templets)
                        {
                            if (templet.Object.name == propInfo.Name)
                            {
                                prop = UnityEngine.Object.Instantiate(templet.Object);
                                break;
                            }
                        }
                        if (!prop)
                        {
                            Debug.LogError("Missing prop templet: " + propInfo.Name);
                            continue;
                        }
                        prop.transform.parent        = controller.propsParent;
                        prop.transform.localPosition = new UnityEngine.Vector3(propInfo.Position[0], propInfo.Position[1], propInfo.Position[2]);
                        prop.transform.localRotation = new Quaternion(propInfo.Rotation[0], propInfo.Rotation[1], propInfo.Rotation[2], propInfo.Rotation[3]);
                        prop.transform.localScale    = new UnityEngine.Vector3(propInfo.Scale[0], propInfo.Scale[1], propInfo.Scale[2]);
                        prop.name = propInfo.Name;
                        m.Props.Add(prop);
                    }
                };

                controller.MapLocalized += () =>
                {
                    Debug.Log("\t定位成功  " + controller.MapManagerSource.Name);
                    CurrentMapLocalized?.Invoke(m);
                    GUIPopup.EnqueueMessage("Localized map {name = " + controller.MapInfo.Name + "}", 3);
                    var parameter = controller.PointCloudParticleParameter;
                    parameter.StartColor = new Color32(11, 205, 255, 255);
                    controller.PointCloudParticleParameter = parameter;
                    controller.propsParent.gameObject.SetActive(true);
                };
                controller.MapStopLocalize += () =>
                {
                    CurrentMapStopLocalized?.Invoke(m);
                    Debug.Log("\t定位结束  " + controller.MapManagerSource.Name);
                    GUIPopup.EnqueueMessage("Stopped localize map {name = " + controller.MapInfo.Name + "}", 3);
                    var parameter = controller.PointCloudParticleParameter;
                    parameter.StartColor = new Color32(163, 236, 255, 255);
                    controller.PointCloudParticleParameter = parameter;
                    controller.propsParent.gameObject.SetActive(false);
                };
                m.Controller = controller;
            }
            MapWorker.Localizer.startLocalization();
        }
Пример #9
0
        public void LoadMapMeta(SparseSpatialMapController mapControllerPrefab, bool particleShow)
        {
            if (!MapWorker || MapWorker.Localizer == null)
            {
                return;
            }
            if (Maps.Count > 1)
            {
                // This will take effect after the next MapWorker Start or OnEnable is called.
                // In this sample, we are sure about this according to the calling sequence.
                MapWorker.LocalizerConfig.LocalizationMode = LocalizationMode.KeepUpdate;
            }
            Debug.Log("Maps.Count: " + Maps.Count);
            foreach (var m in Maps)
            {
                var meta = m.Meta;

                var controller = UnityEngine.Object.Instantiate(mapControllerPrefab);
                controller.SourceType       = SparseSpatialMapController.DataSource.MapManager;
                controller.MapManagerSource = meta.Map;
                controller.MapWorker        = MapWorker;
                controller.ShowPointCloud   = particleShow;
                controller.MapLoad         += (map, status, error) =>
                {
                    GUIPopup.EnqueueMessage("Load map {name = " + map.Name + ", id = " + map.ID + "} into " + MapWorker.name + Environment.NewLine +
                                            " => " + status + (string.IsNullOrEmpty(error) ? "" : " <" + error + ">"), status ? 3 : 5);
                    if (!status)
                    {
                        return;
                    }
                    GUIPopup.EnqueueMessage("Notice: By default (MainViewRecycleBinClearMapCacheOnly == false)," + Environment.NewLine +
                                            "load map will not trigger a download in this sample." + Environment.NewLine +
                                            "Map cache is used (SparseSpatialMapManager.clear not called alone)." + Environment.NewLine +
                                            "Statistical request count will not be increased (more details on EasyAR website).", 5);
                    // prop info
                    foreach (var propInfo in meta.Props)
                    {
                        GameObject prop = null;
                        Debug.Log("propInfo.type: " + propInfo.type);
                        switch (propInfo.type)
                        {
                        case MapMeta.PropType.Text:
                            prop = UnityEngine.Object.Instantiate(Globals.instance.templetes[0]);

                            var textTmp = prop.GetComponentInChildren <TextMesh>();
                            textTmp.text = propInfo.text;
                            break;

                        case MapMeta.PropType.Texture:
                            prop = UnityEngine.Object.Instantiate(Globals.instance.templetes[1]);
                            prop.GetComponent <UrlManager>().SetUrl(propInfo.infoUrl, propInfo.infoFileName, propInfo.type);
                            break;

                        case MapMeta.PropType.Video:
                            break;

                        case MapMeta.PropType.Model:
                            break;

                        case MapMeta.PropType.other:
                            Debug.LogError("error: The PropType is other");
                            break;
                        }
                        if (!prop)
                        {
                            Debug.LogError("Missing prop templet: " + propInfo.Name);
                            continue;
                        }
                        prop.transform.SetParent(controller.transform);
                        prop.transform.localPosition = new UnityEngine.Vector3(propInfo.Position[0], propInfo.Position[1], propInfo.Position[2]);
                        prop.transform.localRotation = new Quaternion(propInfo.Rotation[0], propInfo.Rotation[1], propInfo.Rotation[2], propInfo.Rotation[3]);
                        prop.transform.localScale    = new UnityEngine.Vector3(propInfo.Scale[0], propInfo.Scale[1], propInfo.Scale[2]);
                        prop.name = propInfo.Name;
                        // prop info
                        m.Props.Add(prop);
                    }
                };

                controller.MapLocalized += () =>
                {
                    GUIPopup.EnqueueMessage("Localized map {name = " + controller.MapInfo.Name + "}", 3);
                    var parameter = controller.PointCloudParticleParameter;
                    parameter.StartColor = new Color32(11, 205, 255, 255);
                    controller.PointCloudParticleParameter = parameter;
                };
                controller.MapStopLocalize += () =>
                {
                    GUIPopup.EnqueueMessage("Stopped localize map {name = " + controller.MapInfo.Name + "}", 3);
                    var parameter = controller.PointCloudParticleParameter;
                    parameter.StartColor = new Color32(163, 236, 255, 255);
                    controller.PointCloudParticleParameter = parameter;
                };
                m.Controller = controller;
            }
            MapWorker.Localizer.startLocalization();
        }