【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.显示扫描模式界面(含扫描提示/多边形等)

场景搭建

下面式全部UI控制以及点击图标克隆地球的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class GameiniUImanager : MonoBehaviour
{
    float Currentime;
    //1.初始化 (第一个页面打开其他关闭、摄像机关闭)
    //2.点击按钮进入第二个页面、打开摄像机
    [Header("请填入你的AR摄像机")]
    public GameObject Arcamera;
    //----------------------------
    [Header("请把对应的UI物体放进去")]
    public GameObject FirstPage;
    public GameObject SecondPage;
    public GameObject ThirdPage;
    public GameObject Tip01Page;
    public GameObject Tip02Page;
    public GameObject AlwaysDisPage;

    public GameObject EARTHoBJ;

        private void Start()
    {
      
        Arcamera.SetActive(false);//关闭摄像机
        FirstPage.SetActive(true);//打开第一个页面
        SecondPage.SetActive(false);//关闭页面
        ThirdPage.SetActive(false);//关闭页面
        Tip01Page.SetActive(false);//关闭页面
        AlwaysDisPage.SetActive(false);//关闭页面
        Tip02Page.SetActive(false);
    }

    public void FirstPageTurn()
    {
        Debug.Log("用户点击第一个页面关闭,打开第二个页面,摄像机打开");
        FirstPage.SetActive(false);//第一个页面
        SecondPage.SetActive(true);//关闭页面
        Arcamera.SetActive(true);//关闭摄像机
    }
    public void Tip01Open()
    {
        Tip01Page.SetActive(true);//打开
        Currentime = Time.time;
        AlwaysDisPage.SetActive(true);//关闭页面
    }

    public void OpenThirdpage()
    {
        SecondPage.SetActive(false);//关闭页面
        ThirdPage.SetActive(true);//关闭页面
        //提示框,请选择星球放

    }

    public void clonearth()
    {
        //用户点击了地球图标!开始克隆一个地球!
        GameObject tempOBJ= GameObject.Instantiate(EARTHoBJ, new Vector3(0, 0.1f, 0), Quaternion.identity);
        tempOBJ.AddComponent<Raycast>();


    }


    private void Update()
    {
        if (Time.time - Displaytime > 1.5f && Tip01Page.activeSelf)
        {
            Tip01Page.SetActive(false);//扫描成功的提示框
            Debug.Log("自动关闭提示框");
            ThirdPage.SetActive(true);//第三个页面
        }
    }



}

代码功能总结

  1. 初始化功能‌:

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

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

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

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

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

这个脚本主要实现鼠标放在物体上,会缩放物体,以及点击物体克隆UI面板!

要想侦听三维世界的物体,还需要2个东西!

1.摄像机需要添加Physic Raycast组件!

2.场景中需要EventSystem 游戏物体

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;

public class Raycast : MonoBehaviour, IPointerClickHandler, IPointerExitHandler, IPointerEnterHandler, IDragHandler
{
    Vector3 tempscale;
     Object UITipmuban;
    //public GameObject UIfarther;


    void Start()
    {
        tempscale = this.transform.localScale;
        GameObject.FindWithTag("UImuban");
        UITipmuban= Resources.Load("Earth");
        // Vector3 temppos= Camera.main.ScreenToWorldPoint(Input.mousePosition);
    }


    public void OnPointerClick(PointerEventData eventData)
    {
        Debug.Log("点击了物体");
        GameObject.Instantiate(UITipmuban, new Vector3(0, 2f, 0), Quaternion.identity, this.transform);



    }

    public void OnPointerExit(PointerEventData eventData)
    {
        this.transform.localScale = tempscale;
       
    }



    public void OnPointerEnter(PointerEventData eventData)
    {

        this.transform.localScale *= 1.5f;

    }

    public void OnDrag(PointerEventData eventData)
    {
        Debug.Log("拖拽了物体" + Camera.main.ScreenToWorldPoint(Input.mousePosition));

        this.transform.position = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 2f));

    }

 

    // Start is called before the first frame update

}

基于UnityVuforia 开发ar交互动画,点击不同的按钮 播放不同的 动画,猪脚是一只小猫.zip项目工程资源经过严格测试运行并且功能上ok,可实现复现复刻,拿到资料包后可实现复现出一样的项目,本人系统开发经验充足(全栈全领域),有任何使用问题欢迎随时与我联系,我会抽时间努力为您解惑,提供帮助 【资源内容】:包含源码+工程文件+说明等。答辩评审平均分达到96分,放心下载使用!可实现复现;设计报告也可借鉴此项目;该资源内项目代码都经过测试运行;功能ok 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 【提供帮助】:有任何使用上的问题欢迎随时与我联系,抽时间努力解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 下载后请首先打开说明文件(如有);整理时不同项目所包含资源内容不同;项目工程可实现复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Unity青子

难题的解决使成本节约,求打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值