【Unity / PlayMaker】TシャツやグッズにARエフェクトを表示する方法

本記事では、画面に表示されているマークとグッズに印刷されたマークを重ね合わせてボタンを押すと、グッズの周りにエフェクトが表示される機能を、PlayMakerを使って作成する方法を説明します。

完成イメージ

事前準備

事前にUnityにPlayMakerをインストールしておきましょう。

PlayMakerが初めての方は以下の記事を一読すると本記事の理解が深まります。

実装方法

ゲームビューのアスペクト比を変える

ゲームビュー内のアスペクト比をクリックします。

ゲームビュー内のアスペクト比をクリック

ゲームビュー内のアスペクト比をクリック

一番下の[+]ボタンをクリックします。

一番下の[+]ボタンをクリック

一番下の[+]ボタンをクリック

TypeをAspect ratioに変更し、Width & Heightに左から1、2を入力します。

TypeをAspect ratioに変更し、Width & Heightに左から1、2を入力

TypeをAspect ratioに変更し、Width & Heightに左から1、2を入力

最後にOKをクリックするとゲームビューのアスペクト比が大体スマートフォンと同じくらいになります。

ゲームビューのアスペクト比が1:2

ゲームビューのアスペクト比が1:2

Main Cameraの前にオブジェクトを移動する仕組み

空のオブジェクトを作る

画面上部のタブからGameObjectをクリックしCreate Emptyを選択する動作を2回繰り返します。

画面上部のタブからGameObjectをクリックし、Create Emptyを選択

画面上部のタブからGameObjectをクリックし、Create Emptyを選択

すると、Hierarchyウィンドウの中にGameObjectとGameObject (1)が作成されます。
名前は自由に変えられますが、今回は「root」と「PlayObject」に変更して使います。

PlayObjectにPlayMakerFSMを追加する

次にPlayObjectを選択し、Inspectorウィンドウ内のAdd Componentをクリックします。

Inspectorウィンドウ内のAdd Componentを選択

Inspectorウィンドウ内のAdd Componentを選択

検索窓に「PlayMaker」と入力するとPlayMakerFSMが表示されるので、それを選択します。

PlayMakerFSMを追加

PlayMakerFSMを追加

するとInspectorウィンドウ内にPlayMakerFSMが追加されます。

PlayMakerFSMを編集する

Inspectorウィンドウ内のPlayMakerFSM内にあるEditボタンをクリックします。

Editボタンをクリック

Editボタンをクリック

するとPlayMaker Editerが開き、ここでPlayMakerFSMを編集できます。

PlayMakerFSMの編集画面

PlayMakerFSMの編集画面

※もしPlayMaker Editerが最初から開いていたら、HierarchyウィンドウでPlayMakerFSMを持つオブジェクトを選択することで、PlayMaker Editerでそのまま編集できます。

分かりやすくするためにState 1の名前を「Get Camera」に変更しておきましょう。
PlayMaker Editer右下のAction Browserをクリックします。

Action Browserをクリック

Action Browserをクリック

開いたAction Browserの検索窓に「main」と入力するとGet Main Cameraが表示されるのでそれを追加します。

Get Main Cameraを追加

Get Main Cameraを追加

State内に追加されたGet Main CameraのStore Game ObjectをNoneからNew Variable…に変更し、新しいパラメーター値として「MainCamera」を作成します。

パラメーター値の名前を入力してCreate Variableをクリック

パラメーター値の名前を入力してCreate Variableをクリック

PlayMaker Editerの左枠内のGet Cameraを右クリックし、Add Transition→FINISHEDをクリックします。

Add Transition→FINISHEDをクリック

Add Transition→FINISHEDをクリック

PlayMaker Editerの左枠内の何もないところを右クリックし、Add Stateをクリックすることを二回繰り返します。
新しくできたStateの一つの名前を「Move root」、もう一つの名前を「Tapped」に変更します。
PlayMaker Editerの左枠内のGet Cameraの真下にあるFINISHEDからMove rootまでドラッグ&ドロップして、矢印をMove rootにくっつけます。

FINISHEDからMove rootまでドラッグ&ドロップ

FINISHEDからMove rootまでドラッグ&ドロップ

次にMove rootを選択し、Action BrowserからSet Position, Set Rotation, Get Position, Get Rotationを追加します。

Set Position, Set Rotation, Get Position, Get Rotationを追加

Set Position, Set Rotation, Get Position, Get Rotationを追加

Get RotationのGame ObjectをUse OwnerからSpecify Game Objectに変更し、その下のイコールボタンをクリックした後、NoneをMainCameraに変更します。
Get RotationのY AngleをNoneからNew Variable…に変更し、新しいパラメーター値として「RotY」を作成します。
Get RotationのEvery Frameにチェックを入れます。

Get Rotation内を変更する

Get Rotation内を変更する

Set RotationのGame ObjectをUse OwnerからSpecify Game Objectに変更し、Noneをrootに変更します。
Set RotationのY AngleをNoneからRotYに変更します。
Set RotationのEvery Frameにチェックを入れます。

Set Rotation内を変更する

Set Rotation内を変更する

※この方法で作ったARシーンを実際にSTYLY Mobileで体験すると、必ずエフェクトは地面に対して垂直に表示されます。
スマホを斜め下などに向けたときにもエフェクトが正面に表示されてほしい場合は、Y Angleを設定した方法と同様にX AngleとZ Angleを設定してください。

Get PositionのGame ObjectをUse OwnerからSpecify Game Objectに変更し、その下のイコールボタンをクリックした後、NoneをMainCameraに変更します。
Get PositionのVectorをNoneからNew Variable…に変更し、新しいパラメータ値として「CamPos」を作成します。
Get PositionのEvery Frameにチェックを入れます。

Get Position内を変更する

Get Position内を変更する

Set PositionのGame ObjectをUse OwnerからSpecify Game Objectに変更し、Noneをrootに変更します。
Set PositionのVectorをNoneからCamPosに変更します。
Set PositionのEvery Frameにチェックを入れます。

Set Position内を変更する

Set Position内を変更する

これでMove rootのState中はMain Cameraが向いている方向にrootというオブジェクトが移動し続ける仕掛けを作れました。

画面上のボタンをタップするとオブジェクトがアクティブになる仕組み

rootを非アクティブ化する

rootを選択し、Inspectorウィンドウ内最上部のチェックボックスをクリックしてチェックを外します。

チェックを外して非アクティブ化する

チェックを外して非アクティブ化する

するとrootが非アクティブ化されます。

画面上に表示するボタン・マークを作る

画面上部のタブからGameObjectをクリックし、UI→Canvasを選択します。

UI→Canvasを選択

UI→Canvasを選択

作成されたCanvasを選択し、Inspector内のCanvas ScalerのもとにあるUI Scale ModeをConstant Pixel SizeからScale With Screen Sizeへ変更します。

Scale With Screen Sizeへ変更

Scale With Screen Sizeへ変更

Hierarchyウィンドウ内のCanvasを右クリックし、UI→Imageを選択します。
作成されたImageの名前を「Marker」に変更します。

※Markerにはグッズに描かれたマークの画像を後で追加します。
ARで画面に表示されたMarkerとグッズに描かれたマークを体験者に手動で重ねあわせてもらうことで、エフェクトを発生させる位置を体験者自身に調整してもらいます。

Hierarchyウィンドウ内のCanvasを右クリックし、UI→Button-TextMeshProを選択します。
※初めてText Mesh Proのテキストを作ると以下のようなウィンドウが出ます。

「Import TMP Essentials」をクリック

「Import TMP Essentials」をクリック

画像赤線枠内の「Import TMP Essentials」をクリックするとText Mesh Proが使えます。
さらにButtonをMove Toolで下方に移動し、Scale Toolでサイズを調整します。

Buttonの位置とサイズを調整する

Buttonの位置とサイズを調整する

PlayMakerFSMを編集する

PlayObjectを選択し、PlayMaker EditerでPlayMakerFSMを編集します。
Move rootを選択し、Action BrowserからUI Button On Click Eventを追加します。

UI Button On Click Event内のGame ObjectをUse OwnerからSpecify Game Objectに変更し、NoneからButtonに変更します。
UI Button On Click Event内のSend Eventを空白からNew Event…に変更し「Tap」として新しいEventを作成します。

Move root内を設定する

Move root内を設定する

PlayMaker Editerの左枠内のMove rootを右クリックし、Add Transition→Tapをクリックします。
PlayMaker Editerの左枠内のMove rootの真下にあるTapからTappedまでドラッグ&ドロップして、矢印をTappedにくっつけます。

TapからTappedまでドラッグ&ドロップ

TapからTappedまでドラッグ&ドロップ

次にTappedを選択して、PlayMakerFSMを編集します。
Action BrowserからActivate Game Objectを2つ追加します。

片方のActivete Game Object内のActivateのチェックを外します。

二つのActivate Game Object内のGame ObjectをUse OwnerからSpecify Game Objectに変更し、Activateのチェックがついている方をNoneからrootに変更し、Activateのチェックが外れている方をNoneからCanvasに変更します。

Tapped内を設定する

Tapped内を設定する

これでButtonをタップするとCanvasが消えて、rootがMain Cameraが向いている方向に出現して固定される仕組みが完成しました。
最後にrootのもとに、ローカル座標でZ軸の正の方向にグッズの周りに表示したいエフェクトを配置すれば完成です。

使用例

本記事冒頭のサンプルGIF画像のシーンを一例に、この記事で作ったシーンの使い方を説明します。

説明書きを追加する

画面に移っているマークとグッズに描かれたマークを重ね合わせてボタンを押すことを体験者に伝えるための説明を作ります。
CanvasのもとにText-TextMeshProを追加します。
内容はInspectorウィンドウから変更できます。

表示したい説明文をText内に入力する

表示したい説明文をText内に入力する

Markerに画像を追加する

今回はTシャツに印刷されたマークと同じ画像をMarkerに追加します。
まず画像をProjectウィンドウの右枠内にドラッグ&ドロップします。

画像をProjectウィンドウの右枠内にドラッグ&ドロップ

画像をProjectウィンドウの右枠内にドラッグ&ドロップ

追加された画像を選択し、InspectorウィンドウからTexture TypeをDefaultからSprite (2D and UI)に変更して、Applyをクリックします。

Inspectorから画像を設定する

Inspectorから画像を設定する

HierarchyウィンドウでMarkerを選択して、Projectウィンドウ上の画像をSource Imageにドラッグ&ドロップします

Projectウィンドウ上の画像をSource Imageにドラッグ&ドロップ

Projectウィンドウ上の画像をSource Imageにドラッグ&ドロップ

Inspector内にあるColorから透明度を少し低くします。

Inspector内にあるColorから透明度を変更できる

Inspector内にあるColorから透明度を変更できる

rootにエフェクトを追加する

rootを基準にz方向に1メートルのところにエフェクトを追加しました。

z方向に1メートルのところにエフェクトが配置されている

z方向に1メートルのところにエフェクトが配置されている

PlayMakerを使って、ある直線を軸にして放射状に並べたText-TextMeshProを回転させています。

放射状に並べたText - TextMeshProを回転させるstate

放射状に並べたText – TextMeshProを回転させるState

また、Text自体も3つの時間差と3つの拡大率で一定の時間拡大されるようにしています。

時間差を作るstate

時間差を作るState


一定の拡大率で一定時間サイズを拡大するstate

一定の拡大率で一定時間サイズを拡大するState

本記事冒頭のサンプルGIFのシーンは本記事で作った機能をもとに以上のような変更を加えて作られました。
細かい調整は実際にSTYLY Mobileで確認しながら調整するとやりやすいです。
是非これを参考にしてARとグッズを連動させるARシーンを作ってみてください。

※注意※
今回作ったシーンをARシーンとしてUnityからSTYLYにアップロードする際には、Lighting SettingsからSkybox MaterialをNone(Material)に変更しておいてください。

Lighting SettingsからSkybox MaterialをNone(Material)に変更

Lighting SettingsからSkybox MaterialをNone(Material)に変更

STYLYにアップロードする方法

3DモデルをSTYLYにアップロードしてみましょう。

STYLYアカウントを作成する

アカウント作成方法

STYLYにアップロードする方法

UnityからSTYLYにアップロードする方法

STYLYに関する質問、バグ報告、改善してほしい要望はSTYLY FORUMまで
https://jp.forum.styly.cc/support/discussions