Насколько я понимаю, 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);
}
}
Проблема, с которой я столкнулся, заключается в том, что при быстрой смене изображений происходит сбой, иначе воспроизводится видео. Любые другие решения приветствуются