本文へスキップ
バージョン: 3.0

メッシュを作成し、物理演算を追加する

この入門ガイドでは、以下の内容について説明します。

  • デフォルトのマネージャーでシーンに動的メッシングを追加する
  • プレハブの仕組み
  • メッシュに物理衝突を追加する
  • メッシュを不可視にする
  • メッシュの物理演算と連動する

前提条件

ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳細については、 ARDK 3のインストール および ARシーンの設定を参照してください。

メッシュを作成する

メッシュのプレハブを作成するには、次のように行います。

  1. XROriginにAR Mesh Managerを追加します。

    1. Empty GameObjectをXROriginに追加します。 MeshManager という名前を付けます。

    2. MeshManager を選択し、 ARMeshManager コンポーネントを追加します。

    3. コンポーネントの追加をクリックする。 検索ボックスに「Lightship Meshing Extension」と入力して選択します。

      メッシュマネージャーを追加する
  2. プレハブに変換するためのメッシュを用意します。

    1. メインシーンに空のGameObjectを作成し、 MeshChunk という名前を付けます。

    2. MeshChunk に3つのコンポーネント(Mesh Filter (地理情報)、 Mesh Renderer (必要に応じてメッシュを表示)、 Mesh Collider (物理演算)を追加します。

    3. Mesh Renderer を選択して、 Default Material(デフォルトマテリアル) を追加します。

      MeshChunkゲームオブジェクトを作成する方法は次のとおりです。
  3. 次のように、メッシュをプレハブに変換して割り当てます。

    1. MeshChunk をAssets(アセット)ウィンドウにドラッグし、プレハブに変換します。

    2. シーンから MeshChunk のGameObjectを削除します。

    3. MeshManager を開き、 MeshChunk プレハブをインスペクターの Mesh Prefab(メッシュプレハブ) スロットにドラッグします。

      MeshChunkプレハブを作成し、ARMeshManagerに追加します。
  4. 試してみましょう。

    1. デバイスにビルドするか、エディターのプレイボタンを押します。 メッシュのオーバーレイが画面に表示されます。
    プレイバック機能付きメッシュオーバーレイ

メッシュに物理演算を追加する

メッシュには Mesh Collider が追加されているため、オブジェクトがある場合は、Unityの標準的な物理衝突が適用されます。 たとえば、メッシュの表面を歩くキャラクターに衝突したり、壁にぶつかったことをゲームエンティティに知らせることができます。 この演習では、プレイヤーが球体をシーンに発射し、それがメッシュに跳ね返る様子を示すデモを行います。

メッシュに物理演算を追加するには、次のように行います。

  1. 次のように、物理プレハブを作成し、剛体衝突を追加します。
    1. Sphereを作成します。 LauncherSphereと名前をつけます。
    2. RigidBody コンポーネントをそのプレハブに追加します。
    3. Sphere(球体) をAssets(アセット)ウィンドウにドラッグして、シーンから削除します。
  2. 球体を発射するスクリプトを作成するには、次のように行います。
    1. Assetsに新しいスクリプトを作成し、 Launcher という名前を付けます。
    2. この記事の後半にある Code Block 1: Launcher のコードをコピーします。
  3. スクリプトを実行するために、 GameObjectを作成:
    1. Hierarchyで、シーン内を右クリックし、 Create Emptyを選択します。 LauncherScriptと名付け、 Launcher スクリプトを Assets ディレクトリからその上にドラッグ&ドロップします。
    2. Hierarchyから LauncherScript を選択し、 InspectorLauncherSpherePrefab 変数として割り当てます。
  4. デバイスにビルドし、テストしてみましょう。 画面上のどこかをタップし、球体を発射して、表面で跳ね返るようにします。

メッシュを不可視にする

メッシュを不可視にするには、メッシュをレンダリングしないようにUnityに指示する方法が最も簡単です。 プレハブから Mesh Renderer を削除すると、Unityで描画できなくなるだけでなく、メッシュでシーンにオクルージョンやシャドーを適用することもできなくなります。 この機能を維持するために、Lightship は InvisibleMeshWithShadows というシェーダーを提供しています。このシェーダーは、メッシュを直接レンダリングすることなく、光を受けて影を描きます。

メッシュに不可視シェーダーを追加するには、次のように行います。

  1. InvisibleMeshWithShadows シェーダーのコピーがプロジェクトにない場合は、Github リポジトリ (こちら) からダウンロードしてプロジェクトに入れてください。
  2. アセットウィンドウで新しいマテリアルを作成し、 InvisibleShader という名前を付けます。
  3. InvisibleMeshWithShadows シェーダーを InvisibleShaderに追加する:
    1. マテリアルを選択します。
    2. Inspector ウィンドウで、 Shader ドロップダウンをクリックし、 InvisibleMeshWithShadowsを検索して選択します。
  4. InvisibleShader をプレハブの Mesh Renderer に追加します:
    1. HierarchyMeshChunk オブジェクトを選択してください。
    2. Inspector ウィンドウで、 Mesh Renderer コンポーネントを探します。
    3. Materials リストを選択する。 円をクリックし、 InvisibleShader を検索するか、 Invisible Shader を要素ボックスにドラッグ&ドロップします。
陰影のある不可視のメッシュ

追加セクション: メッシュのカスタムテクスチャを作成する

この入門ガイドでは取り上げませんが、AR開発においてメッシュテクスチャを活用する方法は他にもあります。 2つの使用例をご紹介します。

  • カスタムメッシュレンダラー(メッシングのサンプルシーンで使用されている)で法線を表示して、デバッグ中に三角形の向きを確認できるようになりました。
法線を視覚化するカスタムシェーダー
  • デフォルトでは、メッシュレンダラーでUV表面のマップを作成することはできませんが、メッシュ生成時にTriPlanar(トライプラナー)投影を使用することで、ワールド空間のUVマップを作成することができます。
クリックしてランチャーコードを展開

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

public class Launcher : MonoBehaviour
{
public GameObject _prefab;
void Update()
{
#if UNITY_EDITOR
if(Input.GetMouseButtonDown(0))
#else
if (Input.touchCount > 0)
#endif
{
//カメラの前にスポーンする
var pos = Camera.main.transform.position;
var forw = Camera.main.transform.forward;
var thing = Instantiate(_prefab, pos+(forw*0.1f), Quaternion.identity);

//物理演算が追加されている場合は発射する
if (thing.TryGetComponent(out Rigidbody rb))
{
rb.AddForce(forw * 200.0f);
}
}
}
}

詳細情報

  • この仕組みの詳細については、 メッシングを参照してください。