Как отобразить различные префабы с отслеживанием изображений в ARfoundation с Unity? - PullRequest
0 голосов
/ 27 апреля 2020

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

РЕДАКТИРОВАТЬ: - Unity AndroidVideoMedia: ошибка -10000 при запуске кода c. Когда я раскомментирую go.SetActive(false); Когда я показываю камеру устройства на первом изображении, его префаб создает и воспроизводит видео после показа на втором изображении префаба создает экземпляр, но видео не воспроизводится.

1 Ответ

0 голосов
/ 29 апреля 2020

Насколько я понимаю, foreach (var trackedImage in args.added) l oop запускается только один раз, когда обнаруживается новое изображение, уже добавленное в библиотеку. Я создаю экземпляр префаба. Я добавляю инстанцированный префаб в словарь вместе с имя обнаруженного изображения. Поэтому при каждом повторном отображении изображения я могу скрывать и отображать префабы в соответствии с обнаруженным изображением.

 public void OnImageChanged(ARTrackedImagesChangedEventArgs args)
{

    foreach (var trackedImage in args.added)
    {
       //Instantiating prefab
        cubePrefab = Instantiate(cubeTv, trackedImage.transform);
        Debug.Log("Cube prefb name "+cubePrefab.name);
        var data = allDataContent.FirstOrDefault(i => i.imgFileName == trackedImage.referenceImage.name);
        videoName = data.vidFileName;
        Debug.Log("Video File Name = " + videoName);
        vp = cubePrefab.GetComponent<VideoPlayer>();
        vp.source = VideoSource.Url;
        vp.url = Application.persistentDataPath + "/" + videoName;

        vp.playOnAwake = true;
        vp.isLooping = true;
        vp.renderMode = UnityEngine.Video.VideoRenderMode.MaterialOverride;
        vp.targetMaterialRenderer = GetComponent<Renderer>();
        vp.targetMaterialProperty = "_MainTex";
        vp.Play();


        holdList.Add(cubePrefab, trackedImage.referenceImage.name);


    }
    foreach (var trackedImage in args.updated)
    {


        if (trackedImage.trackingState == TrackingState.Tracking)
        {


            var data = allDataContent.FirstOrDefault(i => i.imgFileName == trackedImage.referenceImage.name);
            videoName = data.vidFileName;
            if (File.Exists(Application.persistentDataPath + "/" + videoName))
            {

                foreach (var v in holdList.Values)
                {
                    go = holdList.FirstOrDefault(x => x.Value == trackedImage.referenceImage.name).Key;
                    if (v == trackedImage.referenceImage.name)
                    {

                        go.SetActive(true);


                    }
                    else if(v!= trackedImage.referenceImage.name)
                    {


                         List<GameObject> go = new List<GameObject>();
                         var exceptOne = holdList.Where(i => i.Value != trackedImage.referenceImage.name).ToList();
                         foreach (var item in exceptOne)
                         {
                             go.Add(item.Key);
                         }
                         foreach (var gameObjectone in go)
                         {
                             gameObjectone.SetActive(false);
                         }

                    }
                }



            }




            }
        else
        {

           // go.SetActive(false);
        }




    }

    foreach (var trackedImage in args.removed)
    {
       // go.SetActive(false);
    }

}

Проблема, с которой я столкнулся, заключается в том, что при быстрой смене изображений происходит сбой, иначе воспроизводится видео. Любые другие решения приветствуются

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...