【问题标题】:ARCore Unity - Tracked object (Video) Not scaling to Image Target correctlyARCore Unity - 被跟踪对象(视频)未正确缩放到图像目标
【发布时间】:2018-10-31 04:41:27
【问题描述】:

因此,我一直在绞尽脑汁思考如何链接内容,无论是 3D、2D 还是仅在使用 ARCore 检测到图像时触发的声音,以便添加一些空间选项。当检测到不同的图像时,atm 会播放不同的视频,但是它们不符合被检测到的图像的比例,要么太小要么拉长超出范围。

这段代码看起来有什么问题......

两个 C# 文件合而为一,分别称为: 增强图像控制器

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);
}
}

非常感谢任何帮助。

【问题讨论】:

  • 你也可以分享你的 _augmentedimageVisualizer 预制件吗?可能问题就在那里。您缩放 _augmentedimageVisualizer 预制件的实例,但它看起来像什么?您有具有视频播放器组件的平面或网格吗?

标签: c# unity3d arcore


【解决方案1】:

您可能已经有了答案,但如果其他人对此进行调查,我会抛出某种解决方案。

你应该扔掉所有的样本垃圾。当你只剩下基本的东西时,image.extentx?我相信给你图像的大致宽度(以米为单位)。然后将该值与某种标量一起使用,以便获得适当的宽度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    相关资源
    最近更新 更多