前面已经学习了Vuforia插件导入和识别场景的搭建
一、项目概述
本文将详细介绍一个基于Vuforia的AR应用开发全过程,该应用能够实现3D物体扫描、UI交互提示、星球模型生成以及3D信息展示等功能。以下是完整的技术实现路线。
1 环境配置
首先确保已安装以下组件:
-
Unity Hub + Unity 2021.3.x LTS版本
-
Vuforia Engine AR 9.8.x
-
TextMeshPro (Unity标准包)
2.项目功能清单:
本案例实现的功能清单内容:
1.扫描成功后会弹出一个UI文字提示框“恭喜你扫描成功”
2.扫描完毕以后弹出按钮(包含三个星球),点击按钮就会克隆对应星球到指定位置,
3.用手点击这些模型,模型会放大并且手离开就会复原
4.点击这些模型,会弹出3D 介绍的ui信息 面板
3.绘制UI原型图
担任UI交互设计师的角色根据功能为自己绘制原型图:
二、开发步骤
实现步骤:
2.1 创建UI界面
(首页、主页面、交互页面以及所有的提示框信息面板)提前做好,命名最起码让程序看的懂,避免写代码的时间还没有找UI的时间长...........
2.3 游戏初始化脚本
功能实现逻辑:
1. 获取AR摄像机对应的游戏对象
2. 将其设置为非激活状态
作用:游戏启动时默认禁用AR摄像头,需要点击开始扫描按钮主动开启
2.4 点击开始扫描按钮跳转界面和打开摄像机
实现打开ARcamera以及首页UI和MianpageUI的跳转
功能逻辑A:
/// 1.检测摄像机当前状态
/// 2.如果未激活则开启AR摄像机
/// 3.如果已激活则提示警告
// 功能逻辑B:
/// 1.关闭初始界面(含LOGO/按钮)
/// 2.显示扫描模式界面(含扫描提示/多边形等)
场景搭建
整理到一个脚本了
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
// 游戏UI管理器,负责控制游戏中的UI页面切换和AR摄像机状态
public class GameiniUImanager : MonoBehaviour
{
// 计时变量,用于控制提示页面的显示时间
float Currentime;
// 代码功能概述:
// 1.初始化 (第一个页面打开其他关闭、摄像机关闭)
// 2.点击按钮进入第二个页面、打开摄像机
[Header("请填入你的AR摄像机")]
public GameObject Arcamera; // AR摄像机对象
//----------------------------
[Header("请把对应的UI物体放进去")]
public GameObject FirstPage; // 第一个UI页面
public GameObject SecondPage; // 第二个UI页面
public GameObject ThirdPage; // 第三个UI页面
public GameObject Tip01Page; // 提示页面01
public GameObject Tip02Page; // 提示页面02
public GameObject AlwaysDisPage; // 常驻显示页面
public GameObject EARTHoBJ; // 地球预制体对象
// 初始化方法,在游戏开始时调用
private void Start()
{
// 初始状态设置:
Arcamera.SetActive(false); // 关闭AR摄像机
FirstPage.SetActive(true); // 打开第一个页面
SecondPage.SetActive(false); // 关闭第二个页面
ThirdPage.SetActive(false); // 关闭第三个页面
Tip01Page.SetActive(false); // 关闭提示页面01
AlwaysDisPage.SetActive(false); // 关闭常驻显示页面
Tip02Page.SetActive(false); // 关闭提示页面02
}
// 从第一个页面切换到第二个页面的方法
public void FirstPageTurn()
{
Debug.Log("用户点击第一个页面关闭,打开第二个页面,摄像机打开");
FirstPage.SetActive(false); // 关闭第一个页面
SecondPage.SetActive(true); // 打开第二个页面
Arcamera.SetActive(true); // 激活AR摄像机
}
// 打开提示页面01的方法
public void Tip01Open()
{
Tip01Page.SetActive(true); // 打开提示页面01
Currentime = Time.time; // 记录当前时间,用于计时
AlwaysDisPage.SetActive(true); // 打开常驻显示页面
}
// 打开第三个页面的方法
public void OpenThirdpage()
{
SecondPage.SetActive(false); // 关闭第二个页面
ThirdPage.SetActive(true); // 打开第三个页面
// 这里可以添加提示:"请选择星球放置"
}
// 实例化地球对象的方法
public void clonearth()
{
// 在指定位置(0, 0.1f, 0)实例化地球对象,使用默认旋转
GameObject.Instantiate(EARTHoBJ, new Vector3(0, 0.1f, 0), Quaternion.identity);
}
// 每帧更新的方法
private void Update()
{
Debug.Log(Time.time); // 输出当前时间(用于调试)
// 检查提示页面01是否已经显示超过3秒
if (Time.time - Currentime > 3)
{
Tip01Page.SetActive(false); // 3秒后自动关闭提示页面01
}
}
}
代码功能总结
-
初始化功能:
- 在游戏开始时关闭AR摄像机
- 只显示第一个UI页面,其他所有页面都处于关闭状态
-
页面切换功能:
FirstPageTurn()
: 从第一个页面切换到第二个页面,并激活AR摄像机OpenThirdpage()
: 从第二个页面切换到第三个页面
-
提示功能:
Tip01Open()
: 打开提示页面01并开始计时- 在Update()中自动检测提示页面01的显示时间,超过3秒后自动关闭
-
AR对象功能:
clonearth()
: 在场景中实例化地球对象
-
调试功能:
- 在Update()中输出当前时间,方便调试
这个脚本主要用于管理游戏中的UI页面切换流程和AR功能的基本控制