- Home /
Question by
Aaruli96 · Jan 14, 2021 at 09:30 PM ·
resources.load
AR Resources.load add imagejob not working
Hi,
I am trying to load a picture from Resources, and adding it to AR ReferenceIImageLibrary. The code seems to stop at the ScheduleAddImageJob part. Here is my relevant code:
texture2d = Resources.Load(filename);
//I checked that the texture2d is not null, and that the filename is correct.
Unity.Jobs.JobHandle jobHandle = mutableRuntimeReferenceImageLibrary.ScheduleAddImageJob(texture2d, filename, 0.2f);
//The code doesn't go beyond this.
jobHandle.Complete();
Everything else works fine, I can add images from camera using the same ScheduleAddmageJob, but for some reason it doesn't work with Resources.load. Full code here:
using System.Collections;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Globalization;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
using UnityEngine.UI;
[RequireComponent(typeof(ARTrackedImageManager))]
public class ImageTracking : MonoBehaviour
{
[SerializeField]
XRReferenceImageLibrary runtimeImageLibrary;
MutableRuntimeReferenceImageLibrary mutableRuntimeReferenceImageLibrary;
private ARTrackedImageManager trackedImageManager = null;
private Text currentImageText;
private Text previousImageText;
private Button captureImage;
string name = "";
string filetype = "";
public List<ImageAR> imageList = new List<ImageAR>();
private void Start()
{
StartCoroutine(WaitForUIActivation());
imageList = ResourceManager.GetImageTrackingObjects();
}
IEnumerator WaitForUIActivation()
{
while (!LoadingScene.mainViewActive)
{
yield return null;
}
currentImageText = GameObject.Find("CurrentImageName").GetComponent<Text>();
previousImageText = GameObject.Find("PrevImageName").GetComponent<Text>();
trackedImageManager.referenceLibrary = trackedImageManager.CreateRuntimeLibrary();
mutableRuntimeReferenceImageLibrary = trackedImageManager.referenceLibrary as MutableRuntimeReferenceImageLibrary;
foreach(ImageAR newTrackedImage in imageList)
{
filename = newTrackedImage.TrackedImage;
var texture2d = Resources.Load<Texture2D>(filename);
Unity.Jobs.JobHandle jobHandle = mutableRuntimeReferenceImageLibrary.ScheduleAddImageJob(texture2d, filename, 0.2f);
jobHandle.Complete();
}
trackedImageManager.referenceLibrary = mutableRuntimeReferenceImageLibrary;
trackedImageManager.enabled = true;
}
private void Awake()
{
trackedImageManager = FindObjectOfType<ARTrackedImageManager>();
}
private void OnEnable()
{
trackedImageManager.trackedImagesChanged += ImageChanged;
}
private void OnDisable()
{
trackedImageManager.trackedImagesChanged -= ImageChanged;
}
private void ImageChanged(ARTrackedImagesChangedEventArgs eventArgs)
{
foreach(ARTrackedImage trackedImage in eventArgs.added)
{
UpdateImage(trackedImage);
}
foreach (ARTrackedImage trackedImage in eventArgs.updated)
{
if (trackedImage.referenceImage.name != name)
{
UpdateImage(trackedImage);
}
}
foreach (ARTrackedImage trackedImage in eventArgs.removed)
{
currentImageText.text = "Tracking: None";
}
}
private void UpdateImage(ARTrackedImage trackedImage)
{
name = trackedImage.referenceImage.name;
currentImageText.text = "Tracking:" + name;
}
}
Comment
Your answer
