Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3d 阿科雷+;统一+;增强图像-为不同的图像加载不同的预设_Unity3d_Augmented Reality_Arcore_Android Augmented Reality - Fatal编程技术网

Unity3d 阿科雷+;统一+;增强图像-为不同的图像加载不同的预设

Unity3d 阿科雷+;统一+;增强图像-为不同的图像加载不同的预设,unity3d,augmented-reality,arcore,android-augmented-reality,Unity3d,Augmented Reality,Arcore,Android Augmented Reality,如何为不同的图像指定不同的预设 现在,我有我的所有预制加载在彼此的顶部,但我如何得到它,使每个预制加载在一个图像上只有一次,使每个图像有一个不同的预制 我已经修改了示例代码(帧角),将其加载到我自己的预置中,并使用字典将预置与数据库中的图像配对,但当程序运行时,它将所有预置安装在同一位置,而不是在每个图像上放置一个prefrab,它将所有预置放置在每个图像上-这是我一直使用的代码: public GameObject obj1, obj2, obj3, obj4; Dic

如何为不同的图像指定不同的预设

现在,我有我的所有预制加载在彼此的顶部,但我如何得到它,使每个预制加载在一个图像上只有一次,使每个图像有一个不同的预制

我已经修改了示例代码(帧角),将其加载到我自己的预置中,并使用字典将预置与数据库中的图像配对,但当程序运行时,它将所有预置安装在同一位置,而不是在每个图像上放置一个prefrab,它将所有预置放置在每个图像上-这是我一直使用的代码:

        public GameObject obj1, obj2, obj3, obj4;
    Dictionary<int, GameObject> imagePrefabPairs;
    public AugmentedImage Image;

    void Start()
    {
        instantiateDictionary();
    }

    // TODO: make initialisation dynamic, to match the size of the db.
    public void instantiateDictionary()
    {
        imagePrefabPairs = new Dictionary<int, GameObject>
        {
            { 0, obj1 },
            { 1, obj2 },
            { 2, obj3 },
            { 3, obj4 }
        };
    }

    public void Update()
    {
        if (Image == null || Image.TrackingState != TrackingState.Tracking)
        {
            obj1.SetActive(false);
            obj2.SetActive(false);
            obj3.SetActive(false);
            obj4.SetActive(false);
            return;
        }
        Pose _centerPose = Image.CenterPose;
        imagePrefabPairs[Image.DatabaseIndex].transform.localPosition = _centerPose.position;
        imagePrefabPairs[Image.DatabaseIndex].transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
        imagePrefabPairs[Image.DatabaseIndex].SetActive(true);
    }
公共游戏对象obj1、obj2、obj3、obj4;
字典图像对;
公众形象;
void Start()
{
实例化指令();
}
//TODO:使初始化动态化,以匹配数据库的大小。
公共法令()
{
ImagePrefablePairs=新字典
{
{0,obj1},
{1,obj2},
{2,obj3},
{3,obj4}
};
}
公共无效更新()
{
if(Image==null | | Image.TrackingState!=TrackingState.Tracking)
{
obj1.SetActive(假);
obj2.SetActive(假);
obj3.SetActive(假);
obj4.SetActive(假);
返回;
}
姿势_centerPose=Image.centerPose;
ImagePrefablePairs[Image.DatabaseIndex].transform.localPosition=\u centerPose.position;
ImagePrefablePairs[Image.DatabaseIndex].transform.localScale=newvector3(0.1f,0.1f,0.1f);
ImagePrefablePairs[Image.DatabaseIndex].SetActive(true);
}

我想我需要一些if语句来询问是否加载了一个预置,然后选择加载下一个预置,让它们一次实例化一个,但我不确定如何做到这一点,或者是否有更直接的方法来实现…?

您可以更改您的augmentImageVisualizer预置,因此,在开始时,所有不同的对象都处于非活动状态(
.SetActive(false);
)要更改预设,可以将其添加到层次结构中,将所有对象设置为非活动状态,然后应用更改。应用后,您可以从游戏层次结构中删除预设

Img 1:将现有预制添加到游戏层次结构 Img 2:将所有附加对象设置为非活动(1),并将更改应用到预置(2)

因此,当您从imagedatabase中检测到图像时,将附加AugmenteImageVisualizer预置,并且只有具有给定索引的对象被设置为活动。那么你的代码应该可以工作了

因为一开始所有对象都处于非活动状态,所以可以更改代码的这一部分:

if (Image == null || Image.TrackingState != TrackingState.Tracking)
    {
        obj1.SetActive(false);
        obj2.SetActive(false);
        obj3.SetActive(false);
        obj4.SetActive(false);
        return;
    }
以便仅停用活动对象:

if (Image.TrackingState != TrackingState.Tracking)
        {
            imagePrefabPairs[Image.DatabaseIndex].SetActive(false);
            return;
        }

我通过以下方式为不同的图像指定不同的预设:

  • 我修改了
    AugmentedImageExampleController.cs
  • 我添加了预制件列表:
public List prefables=new List()

  • 对于预制件的相关图像,我使用可视化工具中的
    image.DatabaseIndex
    进行了参考:
visualizer=(AugmentedImageVisualizer)实例化(预置[image.DatabaseIndex],锚定.transform)

ExampleController
的检查器中,您现在可以放入预置(
AugmentedImageVisualizer


就这样,它工作得很好

你的描述很模糊。到目前为止,您尝试了什么?*问题编辑为更清晰的公共增强图像;公共游戏对象[20]模型;如何为特定图像设置特定模型?在上面的代码中,什么是ImagePrefablePairs?@zyonneo ImagePrefablePairs是一个带有图像索引和3d游戏对象的命令:ImagePrefablePairs=new Dictionary{{0,obj1},{1,obj2},{2,obj3},{3,obj4};->请看问题中的代码,一旦目标图像未被跟踪,如何隐藏预制体?@zyonneo我将尝试帮助您回答您的问题: