🙆

[書き散らし] Unity AR空間上のオブジェクトと自分の接触を判定する

2021/03/11に公開
2

この記事の前段階の設定は

https://zenn.dev/aya/articles/54b3c7d043657a

を参考にさせていただきました。

AR空間上の自分の位置 = AR Cameraの位置

"AR Session Origin" の下の "AR Camera" がAR空間上の自分の位置になるようです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PositionDebug : MonoBehaviour
{
    int updateCount = 0; 

    // Update is called once per frame
    void Update()
    {
        updateCount++;
        if (updateCount >= 60)
        {
            Debug.Log(transform.position);
            updateCount = 0;
        }
    }
}

をAR CameraにAddしてARアプリ上で動かすと、スマホを動かした方向や量に応じてそれっぽい値をデバッグ出力していました。

AR Session Originは字の如くAR空間上の原点になるようです。
これも同様にデバッグ表示してみると、常に(0.0, 0.0, 0.0)を示していました。

自分とObjectの接触判定

AR Cameraの子に、人間の身長と幅くらいの大きさにしたCubeをぶら下げました。

AR空間上で自分の位置にCubeが見えるのを避けるため、このCubeに透明なマテリアル(α=0)を適用しました。

([追記]
Cubeは不可視になるので、MeshRendererとMeshFilterを削除できます。
Kogaさんありがとうございます。)

このCubeオブジェクトと接触判定するよう、AR上のオブジェクトに、RigidbodyをAddComponetし、Box Colliderの"Is Trigger"にチェックを入れました。

これでARアプリ上で歩き回った時に、ARオブジェクトにAddComponentしたスクリプト上のMonoBehaviorで"OnTriggerXXX"のメソッドが呼ばれるようになりました。

Discussion

Mitsuhiro KogaMitsuhiro Koga

些細な部分ですがCubeを表示しないのならMeshRendererとMeshFilterを削除してしまって良いと思います