ARにおけるスケール問題【AR Foundation】

ARシーンのコンテンツの見かけのスケール調整についてです.

コンテンツではなくカメラのスケールを調整する

ARコンテンツの代わりに「ARSessionOrigin」のスケールを調整すること.
これにより子のMain Cameraのスケールも調整されます.

相手を大きくしたり小さくするのではなく,自分(カメラ)が小さく大きくすることで,
相対的に大きさを変えるということです.

AR コンテンツ内に存在するアセットのスケールダウンにはリスクが伴います.
例えばゲームオブジェクトに物理演算を適用している場合,
アセットをスケールダウンすると物理挙動が変わるため,動作が不安定になる恐れがあります.

AR Foundation のサンプル

github.com

サンプルシーンのScaleが該当します.
スライダーでスケールの調整をしています.

スクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UniRx;
using UnityEngine.XR.ARFoundation;
using UnityEngine.UI;

public class ScaleController : MonoBehaviour
{
    private ARSessionOrigin m_ARSessionOrigin;

    [SerializeField]
    private Slider _scaleSlider;

    private void Awake()
    {
        m_ARSessionOrigin = GetComponent<ARSessionOrigin>();
    }
    // Start is called before the first frame update
    void Start()
    {
        _scaleSlider.OnValueChangedAsObservable().Subscribe(OnSliderValueChanged);
    }

    public void OnSliderValueChanged(float value)
    {
        if (_scaleSlider != null)
        {
            m_ARSessionOrigin.transform.localScale = Vector3.one / value;
        }
    }
}

スケール調整シーン

f:id:xrdnk:20200701232258g:plain

参考記事

note.com

unity3d.com