ARFoundation 平面に穴をあける

内側壁面用Cubeを5個、外側側面用Cubeを5個作成し、どちらも表になるように重ねる
![D8971517-20B3-449C-950C-FF62C75ADC1F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/86fd2de6-2ac6-308a-f7fe-a5f4370b45a5.jpeg)
![742600C7-3DC3-4E8B-BBD5-75469A63CC8F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/e93d9b12-c69d-0cda-6e5d-b142cf9079de.jpeg)

内側CubeにMaterialを作成し、設定する
![2DFA36B8-9610-46F6-94F2-E00B8190077D.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/8bc1d41b-a7b8-ac5f-2f2a-a9930c24f07f.jpeg)

キャラクターを中に配置する
![F9C3FB36-755E-4570-9E3B-B49FF98AEE09.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/c9f4a8aa-0516-4f22-1b4f-33d42a0a2a77.jpeg)

壁にオクルージョンを設定しているため、キャラのRenderQueueを２００１に設定する（表示順序を決めるため）
![FF415C4A-F5D2-4587-8A29-09D881CFE685.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/e69a64ef-7020-8e84-7cea-f147ffc75ef7.jpeg)

外側用CubeにはSpatialMappingOcclusionを設定する
![17CDA034-659A-464C-9479-5310531ED360.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/eb0be0de-39c3-a1ec-c7c6-970a3122398a.jpeg)

設定完了した後はプレハブにする
![DC09B27E-F044-42C0-BA1C-E4F0068AA2C4.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/2c41b493-79d5-514c-1452-be914a0f888c.jpeg)

FadeのMaterialを作成し、AR DefaultPlaneのElementにアタッチする
![487F32F3-AC1F-4D46-B6CE-EC2E8738E96F.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/3a143b65-cd75-bf2a-c197-8c07545af57b.jpeg)

Hole,Mask,Characterの高さを調整する
![A6A29681-8FEB-4CAC-BF91-894954386045_4_5005_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/2ba73d85-99b8-3d34-a693-70e217c6ed03.jpeg)

AR SessionOriginのRaycastスクリプトにHoleプレハブを設定する
![B387B597-59D1-4DD7-B907-C1F1AE8E2C1C.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/940521/5b2ba81e-bf7f-4701-1955-ca40d2185610.jpeg)

Raycast.csは下記↓

```C#:Raycast.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class Raycast : MonoBehaviour
{
    //Raycast を実行するためのクラス
    private ARRaycastManager m_RaycastManager;
    //Raycast の結果を格納する List
    private List<ARRaycastHit> hitResults = new List<ARRaycastHit>();
    //キャラクターの Prefab
    [SerializeField]
    private GameObject characterPrefab;
    void Start()
    {
        //GameObject にアタッチされている RaycastManager を取得
        m_RaycastManager = GetComponent<ARRaycastManager>();
    }
    void Update()
    {
        //画面がタッチされたら処理を行う
        if (Input.touchCount > 0)
        {
            //画面タッチの情報を取得する
            Touch touch = Input.GetTouch(0);
            //画面タッチの開始時のみ処理を行う
            if (touch.phase == TouchPhase.Began)
            {
                //タッチした方向に Ray を飛ばし、平面との衝突判定を行う
                if (m_RaycastManager.Raycast(
                touch.position,
                hitResults,
                TrackableType.PlaneWithinPolygon
                ))
                {
                    //最初に交差した平面から姿勢を取得して、GameObject を生成する
                    Pose hitPose = hitResults[0].pose;
                    GameObject character = Instantiate(
                    characterPrefab,
                    hitPose.position,
                    hitPose.rotation
                    );
                }
            }
        }
    }
}
```