如何使图像识别后出现的东西保持不变? (unity3d vuforia)

问题描述 投票:0回答:2

你好我正在开发一个Vuforia AR图像识别应用程序。

但是,我希望在扫描图像时出现一个物体,并且该图像保持不被附着(不受扫描图像的位置影响并且在相机中具有固定坐标)到被识别的图像。

我怎样才能做到这一点?

这是通过脚本完成的吗?如果是这样,我怎么编写脚本?我将在哪里添加脚本组件?

到目前为止我尝试过的是

刚跟着this video 但使用了不同的目标和对象

我只是想让识别后出现的物体不被附着

先感谢您。

unity3d vuforia
2个回答
0
投票

我不知道你是否仍然关注这篇文章。

这是你的答案:

我怎样才能做到这一点?

通过将3D模型传输到相机。

这是通过脚本完成的吗?

是。

如果是这样,我怎么编写脚本?

首先,你需要知道你想要什么样的“棒”。是否有触发按钮,或者当相机远离标记时它会粘住?

如果有一个触发按钮,您可以编写脚本,例如当您单击/点击按钮时,它会将3D(GameObject)父级更改为相机。

my3D.transform.SetParent(Camera.main.transform);

如果你想这样做,当你移动你的相机,3D模型自动粘在相机上,它会稍微复杂一点。您需要访问VuforiaImageTarget对象中的ImageTargetTrackableEventHandler.cs。寻找一个名为OnTrackingLost()的函数。代替 :

    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);

    // Disable rendering:
    foreach (Renderer component in rendererComponents)
    {
        component.enabled = false;
    }

    // Disable colliders:
    foreach (Collider component in colliderComponents)
    {
        component.enabled = false;
    }

您通过禁用它来删除整个代码块,并在脚本之上添加

[SerializeField]
GameObject my3D;

在OnTrackingLost()函数内部,输入以下代码:

my3D.transform.SetParent(Camera.main.transform);

之后,转到Inspector视图,单击ImageTarget,会出现这样的情况:

enter image description here

只需将3D从“层次结构”视图拖动到显示的变量图像即可。

我将在哪里添加脚本组件?

如果你正在使用“按钮”方法,只需创建一个空的游戏对象并将脚本附加到它。

希望它有所帮助,因为对于vuforia的支持非常有限。 :)


0
投票

对我来说唯一有用的是在脚本的开头添加一个布尔变量,并使其在OnTrackingLost()进入时,布尔值变为true。我不知道自己是否解释过。

首先你在开头创建:

private bool bol = false;

然后在功能上:

private void OnTrackingLost()
{

    Renderer[] rendererComponents = GetComponentsInChildren<Renderer>(true);
    Collider[] colliderComponents = GetComponentsInChildren<Collider>(true);
    if (!bol) {
        // Disable rendering:
        foreach (Renderer component in rendererComponents)
        {
            component.enabled = false;
        }

        // Disable colliders:
        foreach (Collider component in colliderComponents)
        {
            component.enabled = false;
        }
        bol = true;
    }


    Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
}
© www.soinside.com 2019 - 2024. All rights reserved.