Unity使用AR Foundation(1)

  • Post author:
  • Post category:其他


Unity版本2020.3.7f1c1

一、准备

新建unity项目,参考基本配置操作

Unity AR Foundation 的 ARCore 扩展入门  |  Google Developers



适用于 Android 的 ARCore 扩展快速入门  |  Google Developers

  1. 导航到

    Window

    >

    Package Manager



  2. Packages

    旁边,选择

    Unity Registry

安装两个包,如下图,


安装 ARCore 扩展包



Releases · google-ar/arcore-unity-extensions (github.com)

网址中下载。

导入过程中,我选择了json文件,因为参考导入第二个add package from tarball ,在安装软件到Android过程中会中断build,参考网上解决办法,

选择了第一种的add package from disk

安卓:

  1. 导航到

    编辑

    >

    项目设置

    >

    XR 插件管理

    >

    .


  2. Plug-in Providers

    下检查

    ARCore

    安卓:

  3. 导航到“

    编辑”

    >“

    项目设置”

    >“

    XR 插件管理”

    >“

    ARCore”



    Requirement

    默认设置为

    Required

  4. 单击

    Edit > Project Settings > Player

    ,选择带有 Android 图标的选项卡。在

    其他设置 > 标识下,

    指定

    24

    或更高的

    最低 API 级别

  5. 完成以下修改

二、平面检测放置模型

删除原来的Main Camera,右键添加——XR——AR Session Origin、AR Session。

点击AR Session Origin,1.在右侧添加AR Plane Manager组件(搜索添加),扫描后平面的预制件Plane Prefab需要设置,在Hierarchy场景区域,右键——XR——AR default Plane,将其拖入到文件夹中,修改名字,设置为Plane Prefab。2.为了在扫描后的平面中点击放置三维模型,需要添加AR Raycast Manager。

添加脚本,射线检测,添加AppControler。

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

[RequireComponent(typeof(ARRaycastManager))]
public class AppControler : MonoBehaviour
{
    public GameObject spawnPrefab;
    static List<ARRaycastHit> Hits;
    private ARRaycastManager mRaycastManager;
    private GameObject spawnedObject = null;
    private void Start()
    {
        Hits = new List<ARRaycastHit>();
        mRaycastManager = GetComponent<ARRaycastManager>();
    }

    void Update()
    {
        if (Input.touchCount == 0)
            return;
        var touch = Input.GetTouch(0);
        if (mRaycastManager.Raycast(touch.position, Hits, TrackableType.PlaneWithinPolygon | TrackableType.PlaneWithinBounds))
        {
            var hitPose = Hits[0].pose;
            if (spawnedObject == null)
            {
                spawnedObject = Instantiate(spawnPrefab, hitPose.position, hitPose.rotation);
            }
            else
            {
                spawnedObject.transform.position = hitPose.position;
            }
        }
    }
}


设置预制件,可设置自己的三维模型。

最后是打包安装,运行结果如图

参考

(12条消息) ARFoundation之路-Raycasting_DavidWang-CSDN博客



版权声明:本文为Chasder原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。