ARにおけるスケール問題【AR Foundation】
ARシーンのコンテンツの見かけのスケール調整についてです.
コンテンツではなくカメラのスケールを調整する
ARコンテンツの代わりに「ARSessionOrigin」のスケールを調整すること. これにより子のMain Cameraのスケールも調整されます.
相手を大きくしたり小さくするのではなく,自分(カメラ)が小さく大きくすることで, 相対的に大きさを変えるということです.
AR コンテンツ内に存在するアセットのスケールダウンにはリスクが伴います. 例えばゲームオブジェクトに物理演算を適用している場合, アセットをスケールダウンすると物理挙動が変わるため,動作が不安定になる恐れがあります.
AR Foundation のサンプル
サンプルシーンの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; } } }
スケール調整シーン