๐ท Cloud Anchor
- local anchor๋ฅผ ์์ฑํ ํ ๊ทธ ๊ณณ์ ์ค๋ธ์ ํธ(์ฌ์ด) ์์ฑ
๐ถ

- Main Camera ์ญ์
- AR Session Origin ์์ฑ
- AR Session ์์ฑ
- AR Default Point Cloud ์์ฑ
- AR Default Plane ์์ฑ

- AR Camera
- Tag : MainCamera

- AR Default Point Cloud, AR Default Plane ํ๋ฆฌํนํ ํ ์ญ์

- ์ปดํฌ๋ํธ ์ถ๊ฐ
- AR Point Cloud Manager
- AR Plane Manager
- AR Raycast Manager
- AR Anchor Manager

- ์ฐ๊ฒฐ

- ARCore Extensinos ์์ฑ

- ์ฐ๊ฒฐ


- XR ํด๋ ์์ ์์ฑ
- ARCoreExtensionsCameraConfigFilter
- ARCoreExtensionsConfig

- Cloud Anchor Mode : Enabled

- ์ฐ๊ฒฐ

- ์คํฌ๋ฆฝํธ ์์ฑ : CloudAnchorManager
- ์คํฌ๋ฆฝํธ ์ถ๊ฐ
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
// Google ARCore Extensions
using Google.XR.ARCoreExtensions;
using System;
public class CloudAnchorManager : MonoBehaviour
{
// ์ํ ๋ณ์
public enum Mode { READY, HOST, HOST_PENDING, RESOLVE, RESOLVE_PENDING };
// ๋ฒํผ
public Button hostButton; // ํด๋ผ์ฐ๋ ์ต์ปค ๋ฑ๋ก
public Button resolveButton; // ํด๋ผ์ฐ๋ ์ต์ปค ์กฐํ
public Button resetButton; // ๋ฆฌ์
// ์ํ๋ณ์
public Mode mode = Mode.READY;
// AnchorManager // ๋ก์ปฌ ์ต์ปค๋ฅผ ์์ฑํ๊ธฐ ์ํ ํด๋์ค
public ARAnchorManager anchorManager;
// ArRaycastManager
public ARRaycastManager raycastManager;
// ์ฆ๊ฐ์ํฌ ๊ฐ์ฒด ํ๋ฆฌํน
public GameObject anchorPrefab;
// ์ ์ฅ ๊ฐ์ฒด ๋ณ์ (์ญ์ ํ๊ธฐ ์ํ ์ฉ๋)
private GameObject anchorGameObject;
// ๋ก์ปฌ์ต์ปค ์ ์ฅ ๋ณ์
private ARAnchor localAnchor;
// ํด๋ผ์ฐ๋ ์ต์ปค ๋ณ์
private ARCloudAnchor cloudAnchor;
// Raycast Hit
private List<ARRaycastHit> hits = new List<ARRaycastHit>();
// ํด๋ผ์ฐ๋ ์ต์ปค ID ์ ์ฅํ๊ธฐ ์ํ ํค ๊ฐ (PlayerPregs.SetString("ํค", ๊ฐ));
private const string cloudAnchorKey = "CLOUD_ANCHOR_ID";
// ํด๋ผ์ฐ๋ ์ต์ปค ID
private string strCloudAnchorId;
void Start()
{
// ๋ฒํผ ์ด๋ฒคํธ ์ฐ๊ฒฐ
hostButton.onClick.AddListener(() => OnHostClick());
resolveButton.onClick.AddListener(() => OnResolveClick());
resetButton.onClick.AddListener(() => OnResetClick());
}
void Update()
{
if (mode == Mode.HOST)
{
Hosting();
}
}
void Hosting()
{
if (Input.touchCount < 1) return;
Touch touch = Input.GetTouch(0);
if (touch.phase != TouchPhase.Began) return;
// ๋ก์ปฌ ์ต์ปค๊ฐ ์กด์ฌํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ธ
if (localAnchor == null)
{
// Raycast ๋ฐ์ฌ
if (raycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon))
{
// ๋ก์ปฌ ์ต์ปค๋ฅผ ์์ฑ
localAnchor = anchorManager.AddAnchor(hits[0].pose);
// ๋ก์ปฌ ์ต์ปค ์์น์ ์ฌ์ด ์ฆ๊ฐ์ํค๊ณ ๋ณ์์ ์ ์ฅ
anchorGameObject = Instantiate(anchorPrefab, localAnchor.transform);
}
}
}
private void OnHostClick()
{
mode = Mode.HOST;
}
private void OnResolveClick()
{
mode = Mode.RESOLVE;
}
private void OnResetClick()
{
}
}
-

- ์ฐ๊ฒฐ

- Canvas ์์ฑ
- UI Scale Mode : Scale With Screen Size

- UI ์์ฑ

- ์ฐ๊ฒฐ
- Build & Run
- Host ๋ฒํผ ๋๋ฅธ ํ ํ๋ฉด ํด๋ฆญํ๋ฉด ์ฌ์ด ์์ฑ๋จ
- ๋ก์ปฌ ์ต์ปค ์์ฑ๋จ
'Unity > AR' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
12. AR Foundation - Cloud Anchor (3) Cloud Anchor (1) | 2021.09.23 |
---|---|
10. AR Foundation - Cloud Anchor (1) Setting (0) | 2021.09.20 |
09. AR Foundation - Occlusion culling (0) | 2021.09.18 |
08. AR Foundation - ์ผ๊ตด ์ธ์ (0) | 2021.09.17 |
07. AR Foundation - ์ค์น (2) | 2021.09.16 |