0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ARFoundation 平面に穴をあける

Last updated at Posted at 2021-07-26

内側壁面用Cubeを5個、外側側面用Cubeを5個作成し、どちらも表になるように重ねる
D8971517-20B3-449C-950C-FF62C75ADC1F.jpeg
742600C7-3DC3-4E8B-BBD5-75469A63CC8F.jpeg

内側CubeにMaterialを作成し、設定する
2DFA36B8-9610-46F6-94F2-E00B8190077D.jpeg

キャラクターを中に配置する
F9C3FB36-755E-4570-9E3B-B49FF98AEE09.jpeg

壁にオクルージョンを設定しているため、キャラのRenderQueueを2001に設定する(表示順序を決めるため)
FF415C4A-F5D2-4587-8A29-09D881CFE685.jpeg

外側用CubeにはSpatialMappingOcclusionを設定する
17CDA034-659A-464C-9479-5310531ED360.jpeg

設定完了した後はプレハブにする
DC09B27E-F044-42C0-BA1C-E4F0068AA2C4.jpeg

FadeのMaterialを作成し、AR DefaultPlaneのElementにアタッチする
487F32F3-AC1F-4D46-B6CE-EC2E8738E96F.jpeg

Hole,Mask,Characterの高さを調整する
A6A29681-8FEB-4CAC-BF91-894954386045_4_5005_c.jpeg

AR SessionOriginのRaycastスクリプトにHoleプレハブを設定する
B387B597-59D1-4DD7-B907-C1F1AE8E2C1C.jpeg

Raycast.csは下記↓

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
                    );
                }
            }
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?