栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

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

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

前言

首先这个文档是基于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 m_Hits = new List();
  [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,仔细阅读代码应该就能明白了!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号