Unity: ARSessionOrigin не содержит метод Raycast

Делаю вторую часть урока Getting Started With ARFoundation in Unity (ARKit, ARCore). Здесь, для работы с объектом автор использует метод ARSessionOrigin.Raycast. Но в редакторе выдаётся ошибка, что такого метода нет:

error CS1061: ‘ARSessionOrigin’ does not contain a definition for ‘Raycast’ and no accessible extension method ‘Raycast’ accepting a first argument of type ‘ARSessionOrigin’ could be found (are you missing a using directive or an assembly reference?)

Дело в том, что урок делали по ARKit экспериментальной версии и теперь (в версии 2.1.0+) нужно делать немного по другому.

Эта строка нам не подходит:

arOrigin.Raycast(screenCenter, hits, TrackableType.Planes);

Придётся заменить часть кода, но сначала в редакторе Unity в окне Иерархии добавим компонент для AR Session Origin:
HierarchyAR Session OriginAdd ComponentARRaycastManager

Unity: ARSessionOrigin не содержит метод Raycast

Можно было добавить программно, но будет не так наглядно.

Далее изменим код для метода UpdatePlacementPose:

  private void UpdatePlacementPose()
  {
    var screenCenter = Camera.current.ViewportToScreenPoint(new Vector3(0.5f, 0.5f));
    var hits = new List<ARRaycastHit>();
    var raycastManager = FindObjectOfType<ARRaycastManager>(); // Это лучше перенести в Start(), чтобы не вызывалось при каждом апдейте

    raycastManager.Raycast(screenCenter, hits, TrackableType.Planes); 

    placementPoseIsValid = hits.Count > 0;
    if (placementPoseIsValid)
    {
      placementPose = hits[0].pose;
    }
  }
  • Добавьте на сцену объект с компонентом ARInputManager (куда угодно)
  • К объекту «AR Camera» добавьте компонент ARCameraManager
  • Используйте метод Raycast, входящий в ARRaycastManager (ранее он был в составе ARSessionOrigin)
  • Интерфейсы TryGet/TryAdd/TryRemove были переименованы на Get/Add/RemoveГид по миграции


Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments