0 支持
17 閲覧

ARfoundationを利用し、3D Objectと同じ要領でScroll Viewもマーカー認識して出して、実際にスクロールもできるようにしたいと考えています。

Scroll Viewの入っているWorld SpaceのCanvasごとprefabにしてマーカーに登録すればいいと考えていたのですが、Canvasをprefabにした段階でHierarchyからARcameraを参照できなくなってしまうため、EventCameraが強制的にNoneになってしまいます。そのためARとしてCanvasを出現させることはできるがARcameraと紐付けられていないことが原因で、Scroll Viewをスクロールさせることができないと考えています。

WorldSpaceのCanvasをインスタンス化した後でスクリプトでEventCameraを設定できないかと考えたのですが、調べても分かりませんでした。この方法で問題を解決することは可能でしょうか。

オブジェクトを出すために使用しているソースコード

`using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.XR.ARFoundation;

[RequireComponent(typeof(ARTrackedImageManager))]
public class ImageTracking : MonoBehaviour
{

[SerializeField]
private GameObject[] placeablePrefabs;

private Dictionary<string, GameObject> spawnedPrefabs = new Dictionary<string, GameObject>();
private ARTrackedImageManager trackedImageManager;

private void Awake()
{
    trackedImageManager = FindObjectOfType<ARTrackedImageManager>();

    foreach (GameObject prefab in placeablePrefabs)
    {
        GameObject newPrefab = Instantiate(prefab, Vector3.zero, Quaternion.identity);
        newPrefab.name = prefab.name;
        newPrefab.SetActive(false); // 追加
        spawnedPrefabs.Add(prefab.name, newPrefab);
    }
}

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)
    {
        UpdateImage(trackedImage);
    }
    foreach (ARTrackedImage trackedImage in eventArgs.removed)
    {
        spawnedPrefabs[trackedImage.name].SetActive(false);
    }
}

private void UpdateImage(ARTrackedImage trackedImage)
{
    string name = trackedImage.referenceImage.name;
    Vector3 position = trackedImage.transform.position;
    Quaternion rotation = trackedImage.transform.rotation;

    GameObject prefab = spawnedPrefabs[name];
    prefab.transform.position = position;
    prefab.transform.rotation = rotation;
    prefab.SetActive(true);

    foreach (GameObject go in spawnedPrefabs.Values)
    {
        if (go.name != name)
        {
            go.SetActive(false);
        }
    }
}

}`

閉鎖(理由): 使用しているARcameraにMaincameraをタグ付けしたら自動的に紐付けしてくれてスクロールできるようになりました。
初心者 (120 ポイント)
閉鎖 | 17 閲覧

関連する質問

0 支持
1 回答
0 支持
1 回答
eyi 初心者 (120 ポイント) 2020 10/1 質問 | 59 閲覧
0 支持
1 回答
neoaco 初心者 (280 ポイント) 2020 8/17 質問 | 171 閲覧
0 支持
1 回答
きりぎりす 初心者 (250 ポイント) 6/27 質問 | 52 閲覧
0 支持
1 回答
hinana 初心者 (160 ポイント) 6/2 質問 | 56 閲覧
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

157 質問

153 回答

159 コメント

188 ユーザー