メッシュを作成し、物理演算を追加する
この入門ガイドでは、以下の内容について説明します。
- デフォルトのマネージャーでシーンに動的メッシングを追加する
- プレハブの仕組み
- メッシュに物理衝突を追加する
- メッシュを不可視にする
- メッシュの物理演算と連動する
前提条件
ARDKがインストールされたUnityプロジェクトと、セットアップされた基本的なARシーンが必要です。 詳細については、 ARDK 3のインストール および ARシーンの設定を参照してください。
メッシュを作成する
メッシュのプレハブを作成するには、次のように行います。
-
XROriginにAR Mesh Managerを追加します。
-
Hierarchyで、
XROrigin
を右クリックし、 Create Empty を選択して、空のGameObject
を追加します。 新しいオブジェクトの名前は MeshManagerとします。 -
Hierarchyで、 MeshManagerを選択し、 Inspector ウィンドウで、 Add Component をクリックし、 ARMeshManager Component を追加します。
-
このプロセスを繰り返しますが、代わりに Lightship Meshing Extension Component を追加します。
-
-
AR Occlusion Managerを追加する:
-
Hierarchyで、
XROrigin
と Camera Offsetを展開し、 Main Camera オブジェクトを選択します。 次に、 Inspectorで、 Add Component をクリックし、AROcclusionManager
を追加します。 -
Occlusion Preference Mode を No Occlusionに設定する。
-
-
プレハブに変換するためのメッシュを用意します。
-
Hierarchyで右クリックし、メインシーンに Empty
GameObject
を作成します。 名前は MeshChunkとします。 -
Inspector ウィンドウで、3つのコンポーネントを MeshChunkに追加します。 Mesh Filter は地理情報を保持し、 Mesh Renderer はメッシュを表示し、 Mesh Collider は物理を提供します。
-
Mesh Renderer Componentで、 Materials ドロップダウンを展開し、○ボタンをクリックして Select Material ウィンドウを開き、 Default Material を選択して追加します。
-
-
次のように、メッシュをプレハブに変換して割り当てます。
-
MeshChunk を Hierarchy から Assets ウィンドウにドラッグし、プレハブに変換します。
-
MeshChunk
GameObject
をシーンから削除します。 -
** Hierarchy から MeshManager を選択し、 MeshChunk プレハブを Mesh Prefab スロットにドラッグします。** **** ****
-
-
試してみましょう。
- デバイスにビルドするか、エディターのプレイボタンを押します。 メッシュのオーバーレイが画面に表示されます。
メッシュに物理演算を追加する
メッシュには Mesh Collider が追加されているため、オブジェクトがある場合は、Unityの標準的な物理衝突が適用されま す。 たとえば、メッシュの表面を歩くキャラクターに衝突したり、壁にぶつかったことをゲームエンティティに知らせることができます。 この演習では、プレイヤーが球体をシーンに発射し、それがメッシュに跳ね返る様子を示すデモを行います。
メッシュに物理演算を追加するには、次のように行います。
- 次のように、物理プレハブを作成し、剛体衝突を追加します。
- Hierarchyで右クリックし、 3D Object にマウスオーバーし、 Sphereを選択する。 LauncherSphereと名前をつけます。
- LauncherSphere を Hierarchyで選択し、 RigidBody Component を Inspectorで追加します。
- LauncherSphere を Assets ウィンドウにドラッグしてプレハブにし、シーンから削除します。
- 球体を発射するスクリプトを作成するには、次のように行います。
- Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 C# Scriptを選択します。 新しいスクリプトの名前は Launcherとします。
- Launcher のコードをスクリプトに追加します:
クリックしてランチャーコードを展開
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);
}
}
}
}
- スクリプトを実行するために、
GameObject
を作成:- Hierarchyで、シーン内を右クリックし、 Create Emptyを選択します。 LauncherScriptと名付け、 Launcher スクリプトを Assets ディレクトリからその上にドラッグ&ドロップします。
- Hierarchyから LauncherScript を選択し、 Inspectorで LauncherSphere を Prefab 変数として割り当てます。
- デバイスにビルドし、テストしてみましょう。 画面上のどこかをタップし、球体を発射して、表面で跳ね返るようにします。
メッシュを不可視にする
メッシュを不可視にするには、メッシュをレンダリングしないようにUnityに指示する方法が最も簡単です。 プレハブから Mesh Renderer を削除すると、Unityで描画できなくなるだけでなく、メッシュでシーンにオクルージョンやシャドーを適用することもできなくなります。 この機能を維持するために、Lightship は InvisibleMeshWithShadows
というシェーダーを提供しています。このシェーダーは、メッシュを直接レンダリングすることなく、光を受けて影を描きます。
メッシュに不可視シェーダーを追加するには、次のように行います。
InvisibleMeshWithShadows
シェーダーのコピーをプロジェクトに持っていない場合は、Github リポジトリ からダウンロードしてプロジェクトに追加してください。- Assets ウィンドウで右クリックし、 Create にマウスオーバーして、 Materialを選択します。 名前は InvisibleShader。
InvisibleMeshWithShadows
シェーダーを InvisibleShaderに追加する:- Assets ウィンドウで、マテリアルを選択します。
- Inspector ウィンドウで、 Shader ドロップダウンをクリックし、
InvisibleMeshWithShadows
を検索して選択します。
- InvisibleShader をプレハブの Mesh Renderer に追加します:
- Hierarchyで MeshChunk オブジェクトを選択してください。
- Inspector ウィンドウで、 Mesh Renderer コンポーネントを見つけ、 Materials メニューをクリックして展開します。
- サークルをクリックし、 InvisibleShader を検索するか、 Invisible Shader を要素ボックスにドラッグ&ドロップして、 InvisibleShader をマテリアルとして追加します。
Custom Mesh Texturing
この入門ガイドでは取り上げませんが、AR開発においてメッシュテクスチャを活用する方法は他にもあります。 2つの使用例をご紹介します。
- カスタムメッシュレンダラー(メッシングのサンプルシーンで使用されている)で法線を表示して、デバッグ中に三角形の向きを確認できるようになりました。
- デフォルトでは、メッシュレンダラーでUV表面のマップを作成することはできませんが、メッシュ生成時にTriPlanar(トライプラナー)投影を使用することで、ワールド空間のUVマップを作成することができます。
詳細情報
- この仕組みの詳細については、 メッシングを参照してください。