Я хочу создать приложение, которое будет распознавать изображения и добавлять к ним различные объекты. Я работаю над примером Google augmentedimage.
У меня есть сфера из двух объектов и куб. Оба являются префабами, и им обоим назначен AugmentedImageVisualizer.
AugmentedImageExampleController разделяет изображения должным образом, но когда AugmentedImageVisualizer хочет включить видимость для куба или сферы, происходит сбой с ошибкой. Объект, который вы хотите создать, имеет значение null.
Вот скрипты
public class AugmentedImageExampleController : MonoBehaviour
{
/// <summary>
/// A prefab for visualizing an AugmentedImage.
/// </summary>
public AugmentedImageVisualizer[] AugmentedImageVisualizerPrefab;
/// <summary>
/// The overlay containing the fit to scan user guide.
/// </summary>
public GameObject FitToScanOverlay;
private Dictionary<int, AugmentedImageVisualizer> m_Visualizers
= new Dictionary<int, AugmentedImageVisualizer>();
private List<AugmentedImage> m_TempAugmentedImages = new List<AugmentedImage>();
/// <summary>
/// The Unity Update method.
/// </summary>
public void Update()
{
// Exit the app when the 'back' button is pressed.
if (Input.GetKey(KeyCode.Escape))
{
Application.Quit();
}
// Get updated augmented images for this frame.
Session.GetTrackables<AugmentedImage>(
m_TempAugmentedImages, TrackableQueryFilter.Updated);
// Create visualizers and anchors for updated augmented images that are tracking and do
// not previously have a visualizer. Remove visualizers for stopped images.
foreach (var image in m_TempAugmentedImages)
{
int i = image.DatabaseIndex;
AugmentedImageVisualizer visualizer = null;
m_Visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
Debug.Log(image.DatabaseIndex);
if (image.TrackingMethod == AugmentedImageTrackingMethod.FullTracking && visualizer == null)
{
// Create an anchor to ensure that ARCore keeps tracking this augmented image.
Anchor anchor = image.CreateAnchor(image.CenterPose);
Debug.Log("Anchor created");
visualizer = (AugmentedImageVisualizer)Instantiate(
AugmentedImageVisualizerPrefab[i], anchor.transform);
visualizer.Image = image;
m_Visualizers.Add(image.DatabaseIndex, visualizer);
}
else if (image.TrackingMethod == AugmentedImageTrackingMethod.NotTracking && visualizer != null)
{
m_Visualizers.Remove(image.DatabaseIndex);
GameObject.Destroy(visualizer.gameObject);
}
}
// Show the fit-to-scan overlay if there are no images that are Tracking.
foreach (var visualizer in m_Visualizers.Values)
{
if (visualizer.Image.TrackingMethod == AugmentedImageTrackingMethod.FullTracking)
{
FitToScanOverlay.SetActive(false);
return;
}
}
FitToScanOverlay.SetActive(true);
}
}
и скрипт Visualiser
public class AugmentedImageVisualizer : MonoBehaviour
{
/// <summary>
/// The AugmentedImage to visualize.
/// </summary>
public AugmentedImage Image;
public GameObject prefabToInstantiate;
/// <summary>
/// The Unity Update method.
/// </summary>
public void Update()
{
if (Image == null || Image.TrackingMethod != AugmentedImageTrackingMethod.FullTracking)
{
prefabToInstantiate.SetActive(false);
return;
}
float halfWidth = Image.ExtentX / 2;
float halfHeight = Image.ExtentZ / 2;
prefabToInstantiate.transform.localPosition =
(halfWidth * Vector3.left) + (halfHeight * Vector3.back);
prefabToInstantiate.SetActive(true);
}
}
Я попытался решить проблему с его запуском при запуске с помощью Instantiate ()
В визуализаторе но все равно не удалось. В оригинальном примере он не используется, он просто обеспечивает видимость игрового объекта.
Скриншоты: Пример контроллера:
Sphere and cube are the same:
введите описание изображения здесь
Unity error: 07-13 14:02:39.642 32121 32161 E Unity : ArgumentException: The Object you want to instantiate is null.
07-13 14:02:39.642 32121 32161 E Unity : at UnityEngine.Object.Instantiate (UnityEngine.Object original, UnityEngine.Transform parent, System.Boolean instantiateInWorldSpace) [0x00044] in /Users/builduser/buildslave/unity/build/Runtime/Export/Scripting/UnityEngineObject.bindings.cs:261
07-13 14:02:39.642 32121 32161 E Unity : at UnityEngine.Object.Instantiate[T] (T original, UnityEngine.Transform parent, System.Boolean worldPositionStays) [0x00001] in /Users/builduser/buildslave/unity/build/Runtime/Export/Scripting/UnityEngineObject.bindings.cs:291
07-13 14:02:39.642 32121 32161 E Unity : at UnityEngine.Object.Instantiate[T] (T original, UnityEngine.Transform parent) [0x00001] in /Users/builduser/buildslave/unity/build/Runtime/Export/Scripting/UnityEngineObject.bindings.cs:286
07-13 14:02:39.642 32121 32161 E Unity : at GoogleARCore.Examples.AugmentedImage.AugmentedImageExampleController.Update () [0x0009f] in C:\Users\\arcore\Assets\GoogleARCore\Examples\AugmentedImage\Scripts\AugmentedImageExampleController.cs:90