一切工作正常,除非我只能看到每个图像的画布一次。当我进入DisableMe()函数时,有什么方法可以重置这个UpdateTrackedImages方法吗?尝试将 trackedImage 设置为 null 但它不起作用...... 画布对于所有这些都是相同的,但是按钮将接收不同的信息。我应该能够回到他们每一个。
private void UpdateTrackedImages(IEnumerable<ARTrackedImage> trackedImages)
{
// If the same image (ReferenceImageName)
foreach (var trackedImage in trackedImages)
{
if (Chairs.Contains(trackedImage.referenceImage.name))
{
if (trackedImage.trackingState == TrackingState.Tracking)
{
Invoke("EnableMe", 0.5f);
}
if (trackedImage.trackingState != TrackingState.Tracking)
{
Invoke("DisableMe", 0.5f);
}
}
}
}
private void EnableMe()
{
canvas.enabled = true;
}
private void DisableMe()
{
canvas.enabled = false;
trackedImage = null;
}
我尝试将 trackedImage 设置为 null 但它不起作用...... 画布对于所有这些都是相同的,但是按钮将接收不同的信息。我应该能够回到他们每一个。
似乎需要在进入
DisableMe()
功能时重置跟踪图像的状态,以便您可以再次看到每个图像的画布。
您面临的问题是因为
trackedImage
变量是在 foreach 循环内部声明的,并且无法在其外部访问。因此,当您在 trackedImage = null;
函数内调用 DisableMe()
时,它只会影响该函数内的局部变量,而不影响 foreach
循环中的变量。
要解决此问题,您可以为 trackedImage 声明一个类级变量,该变量将存储当前跟踪的图像。这是实现这一目标的修改后的代码:
private ARTrackedImage currentTrackedImage; // Declare a class-level variable to store the current tracked image
private void UpdateTrackedImages(IEnumerable<ARTrackedImage> trackedImages)
{
// If the same image (ReferenceImageName)
foreach (var trackedImage in trackedImages)
{
if (Chairs.Contains(trackedImage.referenceImage.name))
{
if (trackedImage.trackingState == TrackingState.Tracking)
{
currentTrackedImage = trackedImage; // Store the currently tracked image
Invoke("EnableMe", 0.5f);
}
if (trackedImage.trackingState != TrackingState.Tracking)
{
Invoke("DisableMe", 0.5f);
}
}
}
}
private void EnableMe()
{
canvas.enabled = true;
}
private void DisableMe()
{
canvas.enabled = false;
currentTrackedImage = null; // Reset the currently tracked image when disabling the canvas
}
现在,通过使用 currentTrackedImage 变量,您应该能够独立启用和禁用每个跟踪图像的画布。请记住在代码的其他部分访问 currentTrackedImage 之前检查它是否不为 null。