Unity+Vuforia增强现实:实时替换模型

来源:互联网 发布:什么软件购物返利 编辑:程序博客网 时间:2024/02/24 05:03

本文实现:
unity基于高通AR开发实时替换模型,如图,识别成功后,点击按钮切换显示模型。

识别成功截图
这里写图片描述

点击按钮后
这里写图片描述

再次点击按钮又显示第一张,如此切换。

实现原理
编写脚本实现高通识别接口,在识别成功后加以判断需要显示的模型即可。
详细介绍参考脚本ModelSwap.cs

using UnityEngine;using System.Collections;using Vuforia;public class ModelSwap : MonoBehaviour {    //高通的追踪类对象,在检视面板中把对应的ImageTarget拖过来就可获得    public TrackableBehaviour theTrackable;    //替换模型的预制体,在检视面板中将需要替换的预制提拖过来    public Transform myModelPrefab;    //模型替换的标志    private bool mSwapModel = false;    //判断替换模型是否为空用于模型切换判断    private static Transform myModelTrf=null;    // Use this for initialization    void Start () {        if (theTrackable == null)        {            Debug.Log ("Warning: Trackable not set !!");        }    }    // Update is called once per frame    void Update () {        if (mSwapModel && theTrackable != null) {            SwapModel();            mSwapModel = false;        }        //监听android物理按钮返回键        if (Input.GetKeyDown(KeyCode.Escape)){            Application.Quit();        }      }    void OnGUI() {        //点击按钮切换模型        if (GUI.Button (new Rect(10,10,200,100), "Swap Model")) {            mSwapModel = true;        }    }    //切换模型函数    private void SwapModel() {        //如果myModelTrf为空,则创建它并替换原模型        if (myModelTrf == null) {            //获得ImageTarget对象            GameObject trackableGameObject = theTrackable.gameObject;            //使其所有“孩子”不可用,相当于隐藏了            for (int i = 0; i < trackableGameObject.transform.childCount; i++) {                Transform child = trackableGameObject.transform.GetChild (i);                child.gameObject.SetActive(false);                        }            //用预制体模型作为“孩子”并激活            if (myModelPrefab != null) {                myModelTrf = GameObject.Instantiate (myModelPrefab) as Transform;                myModelTrf.parent = trackableGameObject.transform;                             //大小和位置都是相对parent的                myModelTrf.localPosition = new Vector3 (0f, 0.6f, 0f);                myModelTrf.localRotation = Quaternion.identity;                myModelTrf.localScale = new Vector3 (0.2f, 0.2f, 0.2f);                myModelTrf.gameObject.SetActive(true);//激活            }        }        //如果不为空,则销毁它,并重新使用原模型        else {            //销毁替换模型            Destroy(myModelTrf.gameObject);            //将原来的“孩子”激活            GameObject trackableGameObject = theTrackable.gameObject;                       for (int i = 0; i < trackableGameObject.transform.childCount; i++) {                Transform child = trackableGameObject.transform.GetChild (i);                child.gameObject.SetActive(true);                        }        }    }}

实现步骤
(1)导包,基本设置,这里不解释,默认显示一个立方体
这里写图片描述
(2)创建一个预制体作为替换模型,如图中的球
这里写图片描述
(3)编写如上脚本ModelSwap.cs,加给AR Camera
这里写图片描述
(4)调试运行,或打包apk测试

0 0
原创粉丝点击