public GameObject[] LoadSemanticColliderObjs(string dirPath)
        {
            // reset
            isAllColliderReady = false;
            totalObjNumber     = loadedObjNumber = 0;
            StopAllCoroutines();

            ViveSR_SceneUnderstanding.ImportSceneObjects(dirPath); // read data from xml

            List <GameObject> outputObjs = new List <GameObject>();
            DirectoryInfo     dir        = new DirectoryInfo(dirPath);

            if (!dir.Exists)
            {
                Debug.Log(dirPath + " does not exist.");
            }
            else
            {
                string[] fileNames = ViveSR_SceneUnderstanding.GetColliderFileNames();
                totalObjNumber = fileNames.Length;
                for (int i = 0; i < fileNames.Length; i++)
                {
                    FileInfo file = new FileInfo(dirPath + "/" + fileNames[i]);
                    //Debug.Log(file.FullName);
                    if (!file.Exists)
                    {
                        Debug.Log(file.FullName + " does not exist.");
                        if (i == fileNames.Length - 1)
                        {
                            isAllColliderReady = true;
                            return(outputObjs.ToArray());
                        }
                        else
                        {
                            continue;
                        }
                    }

                    GameObject go = OBJLoader.LoadOBJFile(file.FullName, LoadColliderDoneCallBack, file.Name);
                    go.SetActive(false);
                    outputObjs.Add(go);
                }
            }
            return(outputObjs.ToArray());
        }