当前位置:   article > 正文

基于Hololen2 unity vuforia空间生成大型物体,以及打开内部浏览器的打开教程_findanyobjectbytype unity

findanyobjectbytype unity

 

1.简介

1.1 功能介绍

        本文主要做了两个功能:

        1.扫描一张二维码生成一个操作台(桌子),这张桌子比二维码尺寸大非常多(就是实际物体大小的桌子),所以需要定位 好桌子和操作台之间的位置关系。并且生成之后,桌子会永远停在空间之中了,并不会随着视角的离开而消失,只有关闭应用程序之后才会消失。

        2.操作台在空间中,只可以绕自己的本事的y轴旋转,不能发生移动和其他轴偏转,并且操作台本身是需要加上动画的。并且有事件进行触发。并且,我们要在显示器 的内部添加上浏览器的功能。

 

 1.2 使用的相关技术和软件

        软件:unity 2022.3 ; vs 2022 

        硬件设备:hololen2 ;台式电脑(i5-12600+5500+16G+1T Nvme)

        相关开发工具:MRTK2.8.3+vuforia10.15.4+webview2

2.相关软件的安装

        2.1 Unity2022+VS2022的安装

        直接搜索unity 下载 最后一个全英文的。进入

        

进入下载unity hub 同时注册自己的账号。 

 

 打开,进入install 。

右上角安装,选择自己想要的版本。 

 

 安装Universal Windows  和 Windows Build Support  最上面还有vs2022 这三个。

在win10 开始界面打开vs installer

 进入选择修改安装一下内容。

 

 

 至此安装已经完毕。

2.2 创建项目

在projects -> New Project.等一会

        

 Enable Version 可以 先不选。

 第一创建项目初始化时间有点长,等1-2 分钟都差不多。创建结束后这个样子

 2.3 下载导入并导入开发工具

下载MRTK 

Download Mixed Reality Feature Tool from Official Microsoft Download Center

 

下载结束后,打开

 等一会初始化后,start,点击Path 选择自己新建项目的 --> Discover Features.

 选择

 

 

 

 

 

 全部选择确认 ,start over 等一会项目重启,就可以。

2.4 Mixed Reality Settings

选择第一个

        

 选择 apply 

 导入TMp

 完成

 

     会自动打开这个界面,如果没打开,可以Edit-> project setting打开这个界面

 openxr 哪里有黄色感叹号点击Fix all

 进入这里

 点击+ 好添加这几个控件,同时有黄色感叹号一律点击之后fix

 回到这个界面,说明已经配置好了。

 2.5 Vuforia 的安装

进入网站并先注册一个行号

Home | Engine Developer Portal

点击Downloads 

 下载

点击并进入导入。至此,我们将所有的项目准备都完成了。

 3.创建自己的项目

3.1项目开始

        打开空项目,Mixed Realtiy  ->Add to Scene and Config,此时项目变成了一个3D 的项目。  

 

 

 创建vuforia 物体

 在imageTarget 打开 Image Target Behaviour 。导入创建的数据库。下面将如何制作自己的数据库

 3.2 创建自己的vuforia 数据库

进入vuforia 官网首页,点击开发,登录自己账号,进入一下页面

 进入target Manager->  Add DataBase

  

add target 设置大小比例:注意1就是实际场景中的1m

 

 

成功后点击Download DataBase. 选择untiy Editor

 

下载后是一个unitypackage 结尾的文件点击(保证项目是打开的),导入项目中。

同时打开相机

 点击Open Vuforia Engine configure 

 需要添加相机的key 

 

 获取key:在官网首页获取key 是一个非常长的字符串,我这里只截取了一行,实际中换成你自己的

 

至此,将data绑定到上面的内容上面。注意 Physical width 非常重要,0.15 表示图片在实际场景的大小就是15厘米,实际图片大小就要和这里的设置一样。否则定位就不对了。

 

 

3.3 导入模型

        将预先设计工程师设计好的模型导入里面去。设置成预制体。

 在项目中场景中添加一个新的cube 并在cube 下添加一个MRTK 自带的button.

MRTK button 打开方式是:

 

 

同时修改Textmeshpro 内的“内容” 改成Scanf.用来触发扫描的开始时间

同时新建一个新的空的物体ScanfDescriptions 用来提示是否触发了扫描,加上TestMeshPro 和眼动追踪功能。

 

 

 

 3.4 相关脚本的编写

        //此脚本挂在的ImageTarget ,实时获取,实际场景中的坐标位置

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. public class changePosition : MonoBehaviour
  5. {
  6. //public GameObject cube;
  7. private Transform pos;
  8. // Start is called before the first frame update
  9. void Start()
  10. {
  11. pos = gameObject.transform;
  12. //Screen.SetResolution(800, 600, true);
  13. //Debug.Log(Screen.resolutions);
  14. }
  15. // Update is called once per frame
  16. void Update()
  17. {
  18. //Debug.Log(pos.position);
  19. }
  20. public Transform GivePos()
  21. {
  22. return pos;
  23. }
  24. }

 此脚本挂在到Cube 上面,用于生成物体

 

  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using Microsoft.MixedReality.Toolkit.UI;
  5. using TMPro;
  6. using System;
  7. public class GetPosition : MonoBehaviour
  8. {
  9. // Start is called before the first frame update
  10. //private Transform pos;
  11. [HideInInspector]
  12. public changePosition changepos;
  13. public bool scanf = false;
  14. //private Caldistance caldistance;
  15. public TextMeshPro descriptions;
  16. public Interactable descriptionButton;
  17. public GameObject Desks;
  18. public bool isOn = false;
  19. public bool isActive = true;
  20. protected DownUpController con;
  21. void Start()
  22. {
  23. changepos = FindAnyObjectByType<changePosition>();
  24. descriptionButton.OnClick.AddListener(verScanf);
  25. //destroyButton.OnClick.AddListener(DestroyDesks);
  26. //caldistance = FindAnyObjectByType<Caldistance>();
  27. }
  28. private void verScanf()
  29. {
  30. scanf = !scanf;
  31. //descriptionButton
  32. }
  33. void CheckisOn()
  34. {
  35. con = FindAnyObjectByType<DownUpController>();
  36. if (con != null)
  37. {
  38. isOn = true;
  39. }
  40. else
  41. {
  42. isOn = false;
  43. }
  44. }
  45. public void showDescription()
  46. {
  47. if (!scanf)
  48. {
  49. descriptions.text = "未开启检测";
  50. }
  51. else
  52. {
  53. descriptions.text = "检测中......";
  54. }
  55. }
  56. //如果想使用事件调用它的情况话,那么需要设置成public
  57. public void ShowDesks()
  58. {
  59. transform.position = changepos.GivePos().position;
  60. //float distance = caldistance.showDistance();
  61. //if (distance <= 1.2f)
  62. if (scanf==true)
  63. {
  64. if (isOn==false)
  65. {
  66. Instantiate(Desks, new Vector3(transform.position.x, transform.position.y-0.38f, transform.position.z+0.70f), transform.rotation);
  67. descriptions.enabled = false;
  68. isActive = false;
  69. transform.GetChild(0).gameObject.SetActive(isActive);
  70. isOn = true;
  71. }
  72. else
  73. {
  74. return;
  75. }
  76. }
  77. else
  78. {
  79. return;
  80. }
  81. }
  82. public bool testTriggle = false;
  83. void Triggle()
  84. {
  85. //testTriggle = !testTriggle;
  86. if (testTriggle == true)
  87. {
  88. ShowDesks();
  89. }
  90. }
  91. // Update is called once per frame
  92. void Update()
  93. {
  94. showDescription();
  95. CheckisOn();
  96. Triggle();
  97. //ShowDesks();
  98. }
  99. //public static implicit operator GameObject(GetPosition v)
  100. //{
  101. // throw new NotImplementedException();
  102. //}
  103. }

 将相关内容挂在到代码上面。

 同时将时间绑定到ImageTarget Found() 函数上面。我们不是使用将模型设置成ImageTarget 这个方法,因为这种方式定位是不准的,尤其是虚拟物体的大小远大于实际图片的大小。并且会随着视线的离开,生成的物体也会发生便宜,我们希望

 

3.5 运行

未开启检测

 检测中

触发 (unity手动设置Test Triggle=true 模拟实际场景中看见图片触发)

 

4.项目打包与部署

4.1 打包

Add op Scenes 将项目加入,设置如图所示,转到Universal windows Platorms 建议可以在创建的时候就直接转换到这个平台。

PlayerSettings ->设置其他内容 

以下 需要设置

 

 

 都设置完成会自动保存,之后选择需要输出的文件夹打包,打包大约1分钟。

 4.2 项目的部署

打开打包的文件夹,点击.sln 文件。

 之后设置如下,同时使用USB连接到hololen2 ,确保hololen2 已经开机,并且进入应用界面,点击设备那个播放的按钮。先会编译,之后运行,部署,第一次会要求输入ping 码,进入hololen2 开发着选项,配对,在vs 输入那个码。就可以了。

 如果大家喜欢内容的话,我会把项目开源,在下面评论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/125792
推荐阅读
相关标签
  

闽ICP备14008679号