Unity 2021.1.15 ARCore环境配置与样例开发

本文详细记录了一位Unity新手如何在Unity 2018及以上版本中集成并使用ARCore创建安卓AR应用的过程,包括安装Unity、配置环境、添加AR组件、脚本交互等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

首先这个文档是基于Unity2018及以上的,由于实习需要做AR相关的内容,但是AR Core之前的教程大多是基于SDK的,而这一功能已不在Unity更高版本中支持,同时楼主又是个Unity小白,所以为了跑起ARCore在安卓上的demo用了很久,以下便是过程记录,仅供参考~

ARCore官方文档

前期准备

  • 安装unity以及对应版本的Android Build Support

推荐用unityhub直接安装

  • 安装AR Foundation插件与ARCore XR Plugin

在Unity内的Window/Package Manager的Unity Registry中搜索安装

  • 将unity的环境调整为Android

位置为File/Build Settings,选择Android并点击Switch Platform,成功后可以看到如下内容

请添加图片描述

  • 点击左下角的Player Settings,随后对其中的Other Settings进行配置:
    请添加图片描述

  • 注意这里要修改默认的包名以及Android版本,24以上的才支持AR Core,其他设置也与图中保持一致即可

在这里插入图片描述

操作过程

0. 创建元素

  • 在Hierarchy中右键,找到XR,然后创建即可,以下模块均为创建相应部分后的操作

在这里插入图片描述

1. 创建一个AR Session

检查是否有AR Input Manager(如果没有就要用Add Component添加)

在这里插入图片描述

2. 创建一个AR Session Origin

检查AR Camera已经对应了AR Session Origin Camera

在这里插入图片描述

  • 使用Add Component添加一个AR Plane Manager(实现检测平面的功能)

选择DetectionMode为Everything(为检测水平和垂直的平面)

  • 使用Add Component添加AR Raycast Manager(为了与平面交互)

最终结果如下:

在这里插入图片描述

  • 选择AR Camera的Tag为主相机(记得删除原本的相机)

在这里插入图片描述

3. 创建一个AR Default Plane
  • 先在上面的Hierarchy中创建(XR/AR Default Plane),再拖至Project视图成为预设(prefab),再删除Scene部分的Plane

在这里插入图片描述

  • 将预设的Plane拖至AR Session Origin的AR Plane Manager的Plane Prefab

在这里插入图片描述

4. 创建一个spawn作为显示在平面内的物体
  • 创建一个名为SpawnableObject的Cube

在这里插入图片描述

  • 设置scale为0.1,0.1,0.1
  • 为cube新建一个名为Spawnable的tag,并为cube选中它

最后结果如下:

在这里插入图片描述

  • 与前面平面同理,将其拖入project window创建预设,并删除Hierarchy中的Cube

(预设Prefab其实有点类似复用的模块、组件…)

5. 创建一个交互的脚本
  • 创建一个C#脚本并将其命名为SpawnableManager
  • 创建一个Empty Game Object在Scene中,并取名为SpawnManager
  • 修改脚本代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;

public class SpawnableManager : MonoBehaviour
{
  [SerializeField]
  ARRaycastManager m_RaycastManager;
  List<ARRaycastHit> m_Hits = new List<ARRaycastHit>();
  [SerializeField]
  GameObject spawnablePrefab;

  GameObject spawnedObject;
  // Start is called before the first frame update
  void Start()
  {
    spawnedObject = null;
  }

  // Update is called once per frame
  void Update()
  {
    // 检测点击,针对点击的不同阶段(phase),我们执行不同的事务
    if (Input.touchCount == 0)
      return;
    if (m_RaycastManager.Raycast(Input.GetTouch(0).position, m_Hits))
    {
      if (Input.GetTouch(0).phase == TouchPhase.Began)
      {
        SpawnPrefab(m_Hits[0].pose.position);
      }
      else if (Input.GetTouch(0).phase == TouchPhase.Moved && spawnedObject != null)
      {
        spawnedObject.transform.position = m_Hits[0].pose.position;
      }
      if (Input.GetTouch(0).phase == TouchPhase.Ended)
      {
        spawnedObject = null;
      }
    }
  }

  private void SpawnPrefab(Vector3 spawnPosition)
  {
    spawnedObject = Instantiate(spawnablePrefab, spawnPosition, Quaternion.identity);
  }
}

6. 绑定到页面对象

  • 创建一个空的Object,并将其改名为SpawnManager

在这里插入图片描述

  • 将刚才创建好的C#脚本拖入对象:

在这里插入图片描述

  • 可以看到脚本已经出现在右侧

在这里插入图片描述

  • 将之前创建的AR Session Origin作为该脚本的Raycast Manager拖入

这将作为页面的AR控制脚本

  • 将之前创建的SpawnableObject作为该脚本的Spanwnable Prefab拖入

这将成为代码中可以复制的对象

7. 导出与运行

  • 首先将XR-Plugin在Android的使用权打开(Edit/Project Settings)
    在这里插入图片描述

  • 在刚刚的Build Settings中,选择Build,并选择保存位置,即可获得APk,安装在手机上就可以看到效果了:
    在这里插入图片描述

  • 效果类似这样,但是最后出现的物体是你设置的SpawnableObject,仔细阅读代码应该就能明白了!
    在这里插入图片描述

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值