在 ARCore unity 中禁用/切换跟踪平面的可视化

2023-11-30

我已经研究 ARCore Unity 的代码有一段时间了,我想做一个简单的任务,即有一个切换按钮,以便用户可以在场景中放置一个对象,同时知道在跟踪平面可见时将其放置在哪里一旦用户放置了对象,他就可以选择仅在视觉上禁用跟踪的平面,使其看起来更真实。我可以在 Android Studio 中通过在主 HelloArActivity.java 中执行类似的操作来完成此操作:

if (planeToggle) {
                mPlaneRenderer.drawPlanes(mSession.getAllPlanes(), frame.getPose(), projmtx);
            }

这真的很简单。我创建了一个名为planeToggle 的布尔值,并将 mPlaneRenderer.drawPlanes 函数放置在 if 条件中。当布尔为 true 时,它​​显示飞机,当 bool 为 false 时,它​​不显示......

然而,对于 Unity 我很困惑。我在 HelloARController.cs 中做了类似的事情:

我做了一个按钮来切换飞机。 为其设置一个事件侦听器以切换布尔变量并执行如下操作:

for (int i = 0; i < m_newPlanes.Count; i++)
                {
                // Instantiate a plane visualization prefab and set it to track the new plane. The transform is set to
                // the origin with an identity rotation since the mesh for our prefab is updated in Unity World
                // coordinates.

                GameObject planeObject = Instantiate(m_trackedPlanePrefab, Vector3.zero, Quaternion.identity,
                        transform);
                    planeObject.GetComponent<TrackedPlaneVisualizer>().SetTrackedPlane(m_newPlanes[i]);

                    m_planeColors[0].a = 0;

                    // Apply a random color and grid rotation.
                    planeObject.GetComponent<Renderer>().material.SetColor("_GridColor", m_planeColors[0]);
                    planeObject.GetComponent<Renderer>().material.SetFloat("_UvRotation", Random.Range(0.0f, 360.0f));


        if (togglePlanes == false){    // my code

          planeObject.SetActive(false); // my code

          } //
  }

当我按下切换按钮时什么也没有发生。

我的另一个选择是在 TrackedPlaneVisualizer.cs 中进行更改,我在其中做了如下操作:

for (int i = 0; i < planePolygonCount; ++i)
            {
                Vector3 v = m_meshVertices[i];

                // Vector from plane center to current point
                Vector3 d = v - planeCenter;

                float scale = 1.0f - Mathf.Min((FEATHER_LENGTH / d.magnitude), FEATHER_SCALE);
                m_meshVertices.Add(scale * d + planeCenter);

                if (togglePlanesbool == true) // my code
                {
                    m_meshColors.Add(new Color(0.0f, 0.0f, 0.0f, 1.0f)); // my code
                }

                else
                {
                    m_meshColors.Add(new Color(0.0f, 0.0f, 0.0f, 0.0f)); // my code
                }
     }

这确实有效。但我在切换时遇到延迟,有时如果渲染了两个不同的平面,它们就会开始在它们之间切换(如果启用了一个,则另一个被禁用)。所以我想这也不是一个选择......有人可以帮忙吗?

请注意,我是 Unity 的初学者。


该示例并不是真正设计用于隐藏和显示平面,因此您必须添加一些内容。

首先,没有代表 ARCore 平面的游戏对象集合。最简单的方法是向游戏对象添加标签:

在 Unity 编辑器中,找到TrackedPlaneVisualizer预制件并选择它。然后在属性检查器中,下拉标签下拉列表并添加一个名为plane.

接下来,在 Toggle 处理程序方法中,您需要找到所有带有“plane”标签的游戏​​对象。然后获取 Renderer 和 TrackedPlaneVisualizer 组件,并根据切换启用或禁用它们。您需要同时完成这两个部分;渲染器绘制平面,TrackedPlaneVisualizer 重新启用渲染器(理想情况下它会遵循渲染器的状态)。

    public void OnTogglePlanes(bool flag) {
        showPlanes = flag;
        foreach (GameObject plane in GameObject.FindGameObjectsWithTag ("plane")) {
            Renderer r = plane.GetComponent<Renderer> ();
            TrackedPlaneVisualizer t = plane.GetComponent<TrackedPlaneVisualizer>();
            r.enabled = flag;
            t.enabled = flag;
        }
    }

您还可以在实例化 GameObject 时执行类似的操作,以便新平面遵循切换。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 ARCore unity 中禁用/切换跟踪平面的可视化 的相关文章

随机推荐

  • CSS 不适用于 django 密码表单字段

    我从网上下载了一个CSS模板 我能够将除密码字段和按钮样式之外的所有内容链接到我的 Django 代码 我错过了什么步骤 我已阅读 Django 文档 并且正在使用 attr 方法将 css 属性添加到我的 Django 表单字段 在我的P
  • 如何在 Linux/OS X 上打印 wstring?

    我怎样才能打印这样的字符串 a c e 在控制台 屏幕上 我试过这个 include
  • 为什么当我执行performSelectorInBackground:时没有自动释放池?

    我正在调用一个在后台线程中运行的方法 self performSelectorInBackground selector loadViewControllerWithIndex withObject NSNumber numberWithI
  • 每个 Flash 上传器都会给出错误的进度值

    我去年初为内部网站编写的文件上传脚本在许多机器上表现得很奇怪 在某些机器上它始终工作正常 而在其他机器上它始终表现不佳 我在使用 YUI Uploader SWFUpload 2 2 和 2 5a 和 Uploadify 时遇到完全相同的问
  • MutableLiveData 中 setValue() 和 postValue() 的区别

    有两种方法可以使变化值MutableLiveData 但有什么区别setValue postValue in MutableLiveData 我找不到相同的文档 这里是班级MutableLiveData安卓的 package android
  • 改变矩阵维度

    让我们举一个可复制的例子 这是我的初始矩阵 d lt matrix 1 80 5 d 1 2 3 4 5 1 1 17 33 49 65 2 2 18 34 50 66 3 3 19 35 51 67 4 4 20 36 52 68 5 5
  • 在 asp net mvc 5 中使用会话变量进行授权

    所以我的项目需求发生了变化 现在我想我需要构建自己的操作过滤器 所以 这是我当前的登录控制器 public class LoginController Controller GET Login public ActionResult Ind
  • 如何随机均衡不相等的值?

    假设我有多个不相等的值 a b c d e 是否可以仅通过随机数生成将这些不相等的值变成相等的值 示例 a 100 b 140 c 200 d 2 e 1000 我希望算法随机定位这些集合 以便最常定位最大值 而大多数情况下只保留最小值 我
  • 当列类型为 nvarchar 时,将表与列值总和一起旋转

    我有一个具有以下结构的表 我想转置它 BookId Status 123A Perfect 123B Restore 123C Lost 123D Perfect 123A Perfect 123B Restore 123A Lost 12
  • rpy2 在 Windows 7 上安装

    我试图在我的计算机上安装 rpy2 但无法做到这一点 我下载了源码包 并尝试使用命令安装Rpy2 rpy2 2 3 2 python setup py install 这是结果 running install running build r
  • 我想获取 SD 卡中的音频文件

    在我的应用程序中我想设置ringtone当我接到来电时 如何打开SDCARD并得到音频文件并列出它 如何获得URI对于所选的audio file MediaScanner 为您查找音乐 填充 MediaStore 数据库 下面是一些查找音乐
  • 使用可选参数和命名参数解决歧义

    我的项目有两种方法 定义如下 void Person int ID double height 0 0 string team Knights my codes void Person int ID double height 0 0 st
  • 如何组合两个机器学习算法的输出?

    如果我有两个非常不同的数据集和两种非常不同的分类技术 是否有一个很好的方法来组合这两个输出 我知道平均值可能有效 但有没有更相关的方法来做到这一点 我听说过一些概念 例如增强学习和集成学习 这些概念是否适用 解决这个问题有两种一般方法 第一
  • 使用部分可变参数调用函数

    考虑我有以下内容 void bar int a int b template
  • 如何设计 HTML5 表单验证消息的样式? [复制]

    这个问题在这里已经有答案了 假设你有一些像这样的 HTML
  • 使用 .htaccess 来屏蔽域名?

    所以这是场景 我拥有的域名是 www abc com 我想将其指向 属于另一家公司 问题 如何使用 htaccess 转发和屏蔽 URL 使其保持为 www abc com 从安全角度来说 为www abc com购买数字证书有什么意义吗
  • 未处理的拒绝(TypeError):ships.reduce 不是函数

    我使用特定的 API 构建了一个船可视化器 API 返回一个 json 响应 我将其注入到表中 问题 有时在白天 我注意到应用程序会停止工作并抛出以下实例 Unhandled Rejection TypeError ships reduce
  • numpy einsum:嵌套点积

    我有两个n by k by 3 arrays a and b e g import numpy as np a np array 1 2 3 3 4 5 4 2 4 1 4 5 b np array 3 1 5 0 2 3 2 4 5 1
  • Mockito 和 PowerMock MethodNotFoundException 被抛出

    当使用 Powermockito 和 Mockito 为我围绕 Hikari CP 制作的连接池构建一些简单的单元测试时 遇到以下错误 测试的设置如下 让我感到困惑的是 我有一大堆未显示的单元测试 它们都使用相同的设置和方法通过了 仅此一个
  • 在 ARCore unity 中禁用/切换跟踪平面的可视化

    我已经研究 ARCore Unity 的代码有一段时间了 我想做一个简单的任务 即有一个切换按钮 以便用户可以在场景中放置一个对象 同时知道在跟踪平面可见时将其放置在哪里一旦用户放置了对象 他就可以选择仅在视觉上禁用跟踪的平面 使其看起来更