Итак, я ломал голову над тем, как связать контент, будь то 3D, 2D или просто звук, для запуска при обнаружении изображения с помощью ARCore, как хотелось бы добавить некоторые пространственные параметры в линию. При обнаружении разных изображений воспроизводится разное видео, однако они не соответствуют пропорциям обнаруживаемого изображения: оно слишком маленькое или вытянуто за пределы.
Что-то не так с этим кодом ...
Создано два файла C #, один из которых называется:
AugmentedImageController
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleARCore;
using System;
using UnityEngine.UI;
using System.Runtime.InteropServices;
public class AugmentedImageController : MonoBehaviour {
[SerializeField] private AugmentedimageVisualizer _augmentedimageVisualizer;
private readonly Dictionary<int, AugmentedimageVisualizer> _visualizers = new Dictionary<int, AugmentedimageVisualizer>();
private readonly List<AugmentedImage> _images = new List<AugmentedImage>();
private void Update()
{
if (Session.Status != SessionStatus.Tracking)
{
return;
}
Session.GetTrackables(_images, TrackableQueryFilter.Updated);
VisualizeTrackables();
}
private void VisualizeTrackables()
{
foreach (var image in _images)
{
var visualizer = GetVisualizer(image);
if (image.TrackingState == TrackingState.Tracking && visualizer == null)
{
AddVisualizer(image);
}
else if (image.TrackingState == TrackingState.Stopped && visualizer != null)
{
RemoveVisualizer(image, visualizer);
}
}
}
private void RemoveVisualizer(AugmentedImage image, AugmentedimageVisualizer visualizer)
{
_visualizers.Remove(image.DatabaseIndex);
Destroy(visualizer.gameObject);
}
private void AddVisualizer(AugmentedImage image)
{
var anchor = image.CreateAnchor(image.CenterPose);
var visualizer = Instantiate(_augmentedimageVisualizer, anchor.transform);
visualizer.Image = image;
_visualizers.Add(image.DatabaseIndex, visualizer);
}
private AugmentedimageVisualizer GetVisualizer(AugmentedImage image)
{
AugmentedimageVisualizer visualizer;
_visualizers.TryGetValue(image.DatabaseIndex, out visualizer);
return visualizer;
}
}
Второе дополненное изображение Визуализатор
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Video;
using GoogleARCore;
using GoogleARCoreInternal;
using System.Runtime.InteropServices;
public class AugmentedimageVisualizer : MonoBehaviour {
[SerializeField] private VideoClip[] _videoClips;
public AugmentedImage Image;
private VideoPlayer _videoPlayer;
void Start()
{
_videoPlayer = GetComponent<VideoPlayer>();
_videoPlayer.loopPointReached += OnStop;
}
private void OnStop(VideoPlayer source)
{
gameObject.SetActive(false);
}
void Update()
{
if (Image == null || Image.TrackingState != TrackingState.Tracking)
{
return;
}
if (!_videoPlayer.isPlaying)
{
_videoPlayer.clip = _videoClips[Image.DatabaseIndex];
_videoPlayer.Play();
}
transform.localScale = new Vector3(Image.ExtentX, Image.ExtentZ, 1);
}
}
Любая помощь с благодарностью.