「AR(現実の映像にCGを重ねる技術)を作ってみたいけど、スマホ実機がないと試せないんでしょ?」——そう思っていました。ところがUnityのAR FoundationとXR Simulationを使うと、スマホ実機なしでも、Unityエディタの中の“仮想の部屋”でARを検証できます。今回は、床や壁などの平面を検出して、タップした場所に3Dモデルを置く最小サンプルを、実機ゼロで作ってみます。
・AR Foundationとは何か(iOSのARKit / AndroidのARCoreとの関係)
・XR Simulationで、実機なしにエディタ内でARを動かす仕組み
・平面検出 → タップで3Dモデルを設置 → 移動・拡大縮小する最小サンプルとコード
・再現に必要なUnity/パッケージのバージョン・XR Simulationの有効化と、つまずきどころ
作るもの:実機なしで“壁や床にモデルを置く”AR
完成形がこちら。Unityエディタの中に用意された仮想の部屋を、まるでスマホをかざしているように動き回ると、床や壁が「平面」として検出されます(青い半透明の面)。そして検出した面(今回は壁)をクリック(=タップの代わり)すると、そこに3Dモデル(オレンジの箱)が置かれる——という、ARの基本がまるごと実機なしで動きます。AR Foundationは床のような水平面も、壁のような垂直面も検出でき、今回はたまたま壁の面に置いています。

AR Foundationとは(ARKit / ARCoreとの関係)
スマホのARは、iPhoneはARKit、AndroidはARCoreという、OSごとに別々の仕組みで動いています。これを両方バラバラに覚えるのは大変です。そこでUnityのAR Foundationが、ARKitとARCoreの“共通の窓口”になってくれます。AR Foundation向けに1回作れば、iOSでもAndroidでも動く——というのが最大の利点です。
そして今回の主役が、その一番右のXR Simulation。これは実機の代わりにUnityエディタの中で動く“にせのAR端末”です。だからスマホがなくてもARの動作確認ができる——というわけです。
XR Simulationとは(エディタ内の“仮想の部屋”)
XR Simulationは、AR Foundation(6.x)に最初から入っている機能です(追加パッケージ不要)。有効にしてPlay(再生)すると、Unityが用意した仮想の部屋の中に“端末”が現れ、マウスとキーボードでその端末を持って歩き回るように動かせます。動かすと、実機と同じように床・壁・机などが平面として検出されていきます。

ポイントは、実機に転送してビルドする手間ゼロで、平面検出やモデル設置の動きを何度でも確認できること。ARは「作る→実機に入れる→試す」の往復が重いのですが、その大半をエディタ内で済ませられます。
作り方:シーンの構成とパッケージ
必要なのは、Unityの公式メニューから置ける2つのオブジェクトと、3つの部品だけです。
- AR Session:ARを動かす“エンジン”(メニュー:ゲームオブジェクト > XR > AR Session)
- XR Origin (Mobile AR):ARカメラ一式(同:XR Origin (Mobile AR))。この下に次の部品を付けます
- AR Plane Manager:平面を検出して表示する(検出面の見た目=プレハブを指定)
- AR Raycast Manager:画面のタップ位置から平面へ“光線”を飛ばして当たり判定する
- 設置スクリプト(自作):当たった平面にモデルを置く(後述)
下は実際のUnity画面です。左の階層にAR Session・XR Origin、そして設置されたPlacedBox(Clone)が見えます。これだけの構成で、右の“仮想の部屋”でARが動いています。

パッケージはAR Foundation を入れるだけ(今回は 6.5.0)。XR SimulationはAR Foundationに同梱されているので、別途インストールは不要です。
コード:タップで設置・移動・拡大縮小
自作するのは、この1ファイルだけ。タップ位置から平面へ光線を飛ばし、当たった所にモデルを置く(すでに置いてあれば移動)。加えて、ホイール(実機ではピンチ)で拡大縮小します。XR SimulationのPlay中は、左クリックがタップの代わりになります。
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
// 検出した平面をタップすると、そこに3Dモデルを「設置」。
// もう一度タップした場所に「移動」。ホイール/ピンチで「拡大縮小」。
[RequireComponent(typeof(ARRaycastManager))]
public class PlaceOnPlane : MonoBehaviour
{
[SerializeField] GameObject placedPrefab; // 設置する3Dモデル
GameObject _spawned;
ARRaycastManager _raycaster;
static readonly List<ARRaycastHit> _hits = new List<ARRaycastHit>();
void Awake() => _raycaster = GetComponent<ARRaycastManager>();
void Update()
{
if (!TryGetTap(out var pos)) return;
// タップ位置から平面へ光線を飛ばし、当たった所を取得
if (!_raycaster.Raycast(pos, _hits, TrackableType.PlaneWithinPolygon)) return;
var pose = _hits[0].pose; // 平面上の位置と向き
if (_spawned == null)
_spawned = Instantiate(placedPrefab, pose.position, pose.rotation); // 設置
else
_spawned.transform.SetPositionAndRotation(pose.position, pose.rotation); // 移動
}
// 実機のタップ / エディタの左クリックを「押した瞬間」だけ true
bool TryGetTap(out Vector2 pos)
{
if (Input.touchCount > 0)
{
var t = Input.GetTouch(0);
pos = t.position;
return t.phase == TouchPhase.Began;
}
if (Input.GetMouseButtonDown(0)) { pos = Input.mousePosition; return true; }
pos = default;
return false;
}
}
※ 拡大縮小(ホイール/ピンチ)は紙面の都合で省略しています。Input.mouseScrollDelta.y や2本指タッチの距離差から、置いたモデルのlocalScaleを増減させるだけです。
動かす:平面検出 → タップで設置 → 拡縮
あとはPlay(再生)して、仮想の部屋を見回すだけ。順番はこうです。
① 部屋を見回して平面を検出。ゲームビューで“端末”を動かすと、床や壁が青い面になっていきます(前の画像)。ここが最初の関門で、端末を少し動かさないと平面は出てきません(実機のスキャンと同じ)。
② 面をクリックしてモデルを設置。検出された面をクリックすると、そこにオレンジの箱が現れます(冒頭の画像/今回は壁の面に置きました)。もう一度別の場所をクリックすれば、その場所へ移動します。水平面(床)でも垂直面(壁)でも同じように置けます。
③ 拡大縮小。ホイールでモデルの大きさを変えられます。下は大きめに置いた状態。実機ではピンチ操作にあたります。

クリックひとつで、光線が平面に当たり、その場所にモデルが吸い付く——ARの「現実に物を置く」感覚が、実機なしで確かめられます。
再現に必要な設定
同じものを作るための、要点だけまとめます。
- Unity:6.4(6000.4.5f1)で確認。AR Foundation 6系が使えるUnity 6であればOK
- パッケージ:
AR Foundation 6.5.0(Package Managerで追加)。XR Simulationは同梱 - XR Simulationの有効化:プロジェクト設定 > XR Plug-in Management のデスクトップタブで
XR Simulationにチェック(これを忘れるとエディタでARが動きません) - 入力方式:AR FoundationはInput Systemを使うため、プロジェクト設定のActive Input Handling を「Both(両方)」に。今回のコードは従来のInput(
Input.GetMouseButtonDown)も使うので、両対応にしておくと安全 - 平面の見た目:AR Plane ManagerのPlane Prefabに、半透明の面を表示するプレハブを指定(メッシュ表示コンポーネント+半透明マテリアル)
つまずきポイントと対処
- 平面が出てこない:一番多いのがこれ。“端末”を止めたままだと平面は検出されません。ゲームビューで右ボタンを押しながらWASDで少し歩き回ると、床や壁が次々に検出されます(実機で部屋をスキャンするのと同じ動きをエディタでやる)。
- エディタでARが起動しない:XR Plug-in ManagementでXR Simulationにチェックが入っているかを確認。未チェックだと「XR Environment is not Available」と表示されます。
- クリックしても置けない:入力方式が新Input Systemのみだと、旧
Inputが例外になります。Active Input Handlingを「Both」に。また最初の1クリックはゲームビューへのフォーカスに吸われることがあるので、もう一度クリックを。 - 置いたモデルが平面を突き抜ける/浮く:モデルの原点(ピボット)が中心だと半分めり込みます。原点を底面に合わせるか、設置時に高さを半分持ち上げると自然になります。
- 実機との違い:XR Simulationはあくまで“仮想の部屋”。実際のカメラ映像・現実の光や影・トラッキングのブレは再現しません。最終確認は実機で、という前提で「作り込みの大半をエディタで速く回す」使い方が向いています。
まとめ
UnityのAR FoundationとXR Simulationを使って、スマホ実機ゼロで“壁や床にモデルを置く”ARの基本を作れました。AR FoundationがARKit / ARCoreの共通の窓口になり、XR Simulationがエディタ内の仮想の部屋で実機の代わりをしてくれる——この2つのおかげで、ARの試作がぐっと手軽になります。
- 必要なのは AR Session+XR Origin と、平面検出・レイキャスト・設置スクリプトの最小構成
- コードは「タップ位置から平面へ光線→当たった所にモデル」の1ファイルだけ
- XR Simulationは有効化と“端末を動かす”のがコツ。実機との違いは押さえつつ、試作を高速に回せる
「ARは実機がないと始められない」と思って踏み出せずにいたなら、まずはこのエディタ内ARから触ってみるのがおすすめです。平面が検出され、クリックした面にモデルが吸い付く瞬間は、実機さながらの手応えがあります。
それでは、今回はここまで。最後までありがとうございました😊