【Unity+Vuforia】Vuforia AR项目开发全流程:从物体扫描到3D交互

前面已经学习了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
        }
    }
}

代码功能总结

  1. 初始化功能‌:

    • 在游戏开始时关闭AR摄像机
    • 只显示第一个UI页面,其他所有页面都处于关闭状态
  2. 页面切换功能‌:

    • FirstPageTurn(): 从第一个页面切换到第二个页面,并激活AR摄像机
    • OpenThirdpage(): 从第二个页面切换到第三个页面
  3. 提示功能‌:

    • Tip01Open(): 打开提示页面01并开始计时
    • 在Update()中自动检测提示页面01的显示时间,超过3秒后自动关闭
  4. AR对象功能‌:

    • clonearth(): 在场景中实例化地球对象
  5. 调试功能‌:

    • 在Update()中输出当前时间,方便调试

这个脚本主要用于管理游戏中的UI页面切换流程和AR功能的基本控制

猜你喜欢

转载自blog.csdn.net/leoysq/article/details/146416878
今日推荐