ARFoundation (ARCore) Series-2. Первое AR-приложение.

1) Создать проект

  1. Создавайте 3D-шаблоны (URP, конвейер рендеринга URP может лучше адаптироваться к производительности устройства по сравнению со встроенным конвейером рендеринга и позволяет разработчикам иметь больше возможностей рендеринга).
    Вставьте сюда описание изображения

Когда мы впервые открываем проект шаблона URP, мы можем увидеть несколько ошибок в консоли.Нам
Вставьте сюда описание изображения
нужно только закрыть проект и перезапустить его.

2) Установите зависимости проекта

  1. Окно > Диспетчер упаковщиков, выберите Unity Register из списка.
    Вставьте сюда описание изображения
  2. Найдите AR Foundation и нажмите «Установить».
    Вставьте сюда описание изображения
  3. Найдите плагины ARCore XR и нажмите, чтобы установить.
    Вставьте сюда описание изображения
  4. Поскольку мы используем универсальный конвейер рендеринга URP, нам также необходимо установить пакет зависимостей, найти Universal RP и нажать кнопку «Установить» (он может быть уже установлен, и нам не нужно об этом беспокоиться).
    Вставьте сюда описание изображения

3) Установите конфигурацию проекта

  1. «Правка» > «Настройки проекта» > «Управление плагинами XR» > «Выбрать Android» > «Проверить ARCore».
    Вставьте сюда описание изображения
  2. Редактировать > Настройки проекта > ARCore Мы устанавливаем для параметра «Глубина» значение «Необязательно», поскольку для получения информации о глубине требуется, чтобы камера мобильного телефона поддерживала глубину. В нашем случае нам пока не нужно использовать «Глубину», поэтому мы также можем позволить телефонам, которые не поддерживают «Глубину», установить нашу APP, поэтому нам нужно установить глубину как необязательную.
    Вставьте сюда описание изображения
  3. Мы создаем конфигурацию URP в папке «Настройки» проекта, чтобы настроить текущий универсальный конвейер рендеринга с именем ARCorePipeline.
    Вставьте сюда описание изображения
  4. После завершения создания у нас будет два новых файла: один — ARCorePipeline.asset, а другой — ARCorePipeline_Renderer.asset. Мы выбираем ACorePipeline_Renderer.asset, чтобы добавить функцию фонового рендеринга AR, чтобы ARFoundation мог отображать содержимое камеры в качестве фона приложения AR.
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  5. «Редактирование» > «Настройки проекта» > «Графика» Установите для параметров конвейера рендеринга с поддержкой сценариев значение только что созданного ARCorePipeline, чтобы был применен наш ARCorePipeline (URP).
    Вставьте сюда описание изображения
  6. Установите собственное название компании и название продукта.
    Вставьте сюда описание изображения
  7. Выберите Android и снимите флажок Auto Graphics API, затем снимите флажок Vulkan.
    Вставьте сюда описание изображения
  8. Продолжая прокручивать вниз, мы увидим, что минимальный уровень API установлен на Android8.0, поскольку телефоны Android ниже этой версии API не могут использовать AR.
    Вставьте сюда описание изображения
  9. Многие мобильные телефоны теперь поддерживают 64-разрядную версию, поэтому мы можем изменить Mono на IL2CPP, а ARMv7 на ARM64 для повышения производительности.
    Вставьте сюда описание изображения
  10. В меню «Редактирование» > «Качество» установите качество Android на «Производительное» и установите в качестве актива конвейера рендеринга только что созданный ARCorePipeline (Здесь есть негативный учебный материал.Если не смотреть внимательно, то мы думаем, что мы изменили актив Performance Pipeline Render. На самом деле это High Fidelity, поэтому нажимаем Performance и затем настраиваем его.
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  11. Все настройки нашего проекта завершены, далее напишем код.

4) Создавать контент сцены и писать сценарии.

  1. Создайте следующую папку для хранения нашей текущей демо-версии.
    Вставьте сюда описание изображения
  2. Щелкните правой кнопкой мыши в «Сценах», чтобы создать сцену, и назовите ее «HelloWorld». На данный момент вы можете добавить образцы, автоматически созданные при создании проекта, а затем дважды щелкните созданный нами «HelloWorld», чтобы открыть сцену.
    Вставьте сюда описание изображения
  3. Удалите основную камеру в сцене (я думаю, что добавленный позже компонент AR будет иметь собственную камеру), а направленный свет можно будет удалить или нет.
    Вставьте сюда описание изображения
  4. Щелкните правой кнопкой мыши XR в каталоге > Сеанс AR, чтобы создать сеанс AR и источник сеанса AR.
    Вставьте сюда описание изображения
  5. Щелкните правой кнопкой мыши в папке «Материалы», чтобы создать два материала: один называется «Плоскость» (позже используется на плоскости, распознаваемой AR), а другой называется «Красный» (позже используется на размещенном кубе), и мы устанавливаем цвет BaseMap для плоскости. установите значение «Прозрачный белый», установите для цвета Red BaseMap красный цвет.
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  6. Щелкните правой кнопкой мыши в дереве каталогов, чтобы создать плоскость по умолчанию AR, и установите для ее материала материал плоскости, который вы только что создали. Откройте папку Prefabs и перетащите в нее плоскость по умолчанию AR, чтобы создать префаб. Затем удалите плоскость по умолчанию AR в дерево каталогов.
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  7. Щелкните правой кнопкой мыши по дереву каталогов, чтобы создать 3D-объект > Куб, затем измените Материал на только что созданный красный и установите xyz масштаба на 0,1. Перетащите его в папку Prefabs, чтобы он стал префабом, а затем удалите это со сцены.
    Вставьте сюда описание изображения
    Вставьте сюда описание изображения
  8. Выберите объект AR Session Origin, затем добавьте к нему компонент справа: AR Plane Manager и перетащите только что созданный префаб Plane в параметр Prefab компонента AR Plane Manager, чтобы AR Plane Manager распознал AR. Приложение позже.Плоскость отображается с использованием нашего префаба Plane, чтобы мы могли видеть, что плоскость распознана.
    Вставьте сюда описание изображения
  9. Создайте сценарий C# с именем SpawnCubeController в папке «Сценарии», а затем дважды щелкните его, чтобы открыть сценарий (Visual Studio запустится автоматически). Этот сценарий используется для обработки размещения пользователем куба.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;

/// <summary>
/// 用来处理放置Cube操作的脚本
/// </summary>

// 我们当前这个脚本依赖当前GO身上需要有ARRaycastManager,所以我们添加这行代码Unity就会自动判断有没有,如果没有就Unity会自动帮我们添加上
[RequireComponent(typeof(ARRaycastManager))]
public class SpawnCubeController : MonoBehaviour
{
    
    
    public GameObject spawnPrefab; // 放置在平面上的Prefab
    public List<ARRaycastHit> hits = new List<ARRaycastHit>(); // 射线碰撞结果
    private ARRaycastManager mRaycastManager; // 当前GO身上的RaycastManager组件
    private GameObject spawnedPrefab = null; // 已经放置的Prefab我们把他存起来


    // Start is called before the first frame update
    void Start()
    {
    
    
        // 获取自身的ARRaycastManager
        this.mRaycastManager = GetComponent<ARRaycastManager>();
    }

    // Update is called once per frame
    void Update()
    {
    
    
        // 每帧都处理用户的触碰事件
        this.handleTouchToSpawnPrefab();
    }
    /// <summary>
    /// 处理用户的触碰事件来放置prefab
    /// </summary>
    private void handleTouchToSpawnPrefab()
    {
    
    
        // 如果用户没有触碰界面就不执行下面的代码
        if (Input.touchCount == 0)
            return;

        // 获取第一个触碰事件的Touch
        Touch touch = Input.GetTouch(0);
        // 根据Touch来发射一条射线,并判断射线是否有碰撞到可追踪结果
        if(mRaycastManager.Raycast(touch.position, this.hits, TrackableType.PlaneWithinPolygon | TrackableType.PlaneWithinBounds))
        {
    
    
            // 获取第一个碰撞结果的pose
            Pose hitPose = hits[0].pose;
            // 如果我们没有spawn过那么我们就实例化一个到场景里面并记录下来,用于下次判断
            if(this.spawnedPrefab == null)
            {
    
    
                this.spawnedPrefab = Instantiate(spawnPrefab, hitPose.position, hitPose.rotation);
            }
            else // 如果我们spawned了那么我们就设置之前实例化的物体的位置就好了,不需要新实例化了
            {
    
    
                this.spawnedPrefab.transform.SetPositionAndRotation(hitPose.position, hitPose.rotation);
            }
        }
    }
}

Документация по перечислению TrackableType

  1. На данный момент мы просто перетаскиваем созданный скрипт в AR Session Origin, а затем перетаскиваем Prefab ранее созданного Cube на атрибут spawnPrefab SpawnCubeController.
    Вставьте сюда описание изображения
  2. На данный момент мы все написали и готовы упаковать на мобильный телефон для тестирования.
  3. «Файл» > «Настройки сборки». Нажмите «Добавить открытые сцены», чтобы добавить текущую сцену в сцену упаковки, затем выберите Android и нажмите «Переключить платформу» ниже, чтобы мы переключились на упаковку Android.
    Вставьте сюда описание изображения
  4. Используйте кабель для передачи данных, чтобы соединить компьютер и мобильный телефон, а затем проверьте, включены ли на телефоне «Параметры разработчика» (поскольку на разных мобильных телефонах есть разные способы включения, вы можете выполнить поиск в Интернете = телефон, который вы используете). используя +, как включить параметры разработчика, включите его. Затем повторно подключите телефон и нажмите, чтобы передать файлы и разрешить отладку ADB). Затем мы нажимаем «Обновить» рядом с «Запустить устройство», а затем щелкните вниз в списке устройств рядом с ним, чтобы увидеть если есть свой мобильный телефон.Если есть, то выбираем его и упаковываем.Ну а если нет, то отладка по USB или отладка по ADB не настроена должным образом.
  5. Нажмите «Создать и запустить», чтобы мы могли упаковать APK и автоматически установить его на телефон.
  6. Таким образом, было разработано наше первое AR-приложение.
    Вставьте сюда описание изображения

おすすめ

転載: blog.csdn.net/qq_45955580/article/details/131277480
おすすめ