Unity/AR

11. AR Foundation - Cloud Anchor (2) Local Anchor

๐Ÿ”ท 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