【Unity / PlayMaker】Render Textureを使って鏡を作成する方法

この記事ではUnityで鏡を作成する方法を紹介します。

前半ではUnityのRender Textureを使って鏡を作る方法を紹介し、後半では作った鏡をPlayMakerを用いてよりリアルに改良する方法を紹介します。

前半部分ではPlayMakerを一切使わないので、PlayMakerを持っていない方も読んでみて、是非参考にしてください。

実際の動作

実際の動作(PlayMakerなし)


実際の動作(PlayMakerあり)

実際の動作(PlayMakerあり)

サンプルシーン

鏡の作り方

Render Textureの作成

画面上部のタブからAssetsをクリックし、Create→Render Textureを選択します。

画面上部のタブからAssetsをクリックし、Create→Render Textureを選択

画面上部のタブからAssetsをクリックし、Create→Render Textureを選択

カメラの作成・設定

次に、Render Textureに反映するカメラを作成します。

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

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

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

次にカメラの映像をRender Textureに反映させます。

今作成したカメラのInspector内のTarget Textureの右にある丸いアイコンをクリックし、New Render Textureを選択します。

今作成したカメラのInspector内のTarget Textureの右にある丸いアイコンをクリック

今作成したカメラのInspector内のTarget Textureの右にある丸いアイコンをクリック


New Render Textureを選択

New Render Textureを選択

これでカメラの映像をRender Textureに反映できました。

オブジェクトにRender Textureを適用する

次にRender Textureを貼り付けるオブジェクトを作成します。

画面上部のタブからGameObjectをクリックし、3D Object→Quadを選択します。

画面上部のタブからGameObjectをクリックし、3D Object→Quadを選択

画面上部のタブからGameObjectをクリックし、3D Object→Quadを選択

わかりやすいように、作ったQuadの名前を「Mirror」に変更します。

次にMirrorにNew Render Textureを貼り付けます。

ProjectウィンドウのAssetsの中のNew Render Textureを、シーン内のMirrorにドラッグ&ドロップします。

New Render Textureを、シーン内のMirrorにドラッグ&ドロップ

New Render Textureを、シーン内のMirrorにドラッグ&ドロップ

これでシーン内のMirror(Quad)にNew Render Textureが反映されました。

また、Mirrorを選択して、InspectorウィンドウからReceive Shadowsのチェックを外します。

InspectorウィンドウからReceive Shadowsのチェックを外す

InspectorウィンドウからReceive Shadowsのチェックを外す

さらに、ScaleのXの値を-1で掛けた値に変更します。

ScaleのXの値を-1でかけた値に変更

ScaleのXの値を-1で掛けた値に変更

Render Textureの調節

InspectorからRender TextureのSizeを調整します。

Render TextureのSizeの縦横比を、MirrorのScaleの縦横比に合わせます。

Render TextureのSizeの縦横比を、MirrorのScaleの縦横比に合わせる

Render TextureのSizeの縦横比を、MirrorのScaleの縦横比に合わせる

※合わせない場合は、Mirrorに映る反射が引き延ばされてしまいます。

縦横比が正しくない場合と正しい場合の比較

縦横比が正しくない場合と正しい場合の比較

また、Sizeを大きくしてMirrorに映る反射を精細にします。

Sizeの大きさによる違いの比較

Sizeの大きさによる違いの比較

※Sizeが大きいほどMirrorに映る反射は精細になりますが、その分シーンの動作が重くなってしまうことに注意してください。

カメラの調整

下の画像のように、Cameraから出る4本の白線がQuadの角に合うように、CameraがMirrorの裏側にくるように、Cameraの位置・角度を調整します。

Cameraの位置・角度を調整

Cameraの位置・角度を調整

さらに、InspectorウィンドウからCameraのClipping PlanesのNearの値を調節して、下の画像のようにCameraから出る白線の四角形がMirrorに重なるようにしてください。

Clipping PlanesのNearの値を調節

Clipping PlanesのNearの値を調節

最後に、HierarchyウィンドウでCameraをMirrorにドラッグ&ドロップして、CameraをMirrorの子オブジェクトにしたら完成です。

CameraをMirrorの子オブジェクトにする

CameraをMirrorの子オブジェクトにする

これでRender Textureのみを使って鏡を作成することができました。

実際の動作

実際の動作

皆さんもこれを使ってシーン作成に挑戦してみてください。

PlayMakerを使って鏡をよりリアルにする

ここまでで作った鏡は、鏡を見る角度に関係なく常に鏡の正面を映します。

鏡を見る角度に関係なく常に鏡の正面を映してしまう

鏡を見る角度に関係なく常に鏡の正面を映してしまう

そこでPlayMakerを使って、鏡を見る角度に応じて鏡に映る方向が変わるように改良します。

事前準備

これ以降の内容ではPlayMakerを使います。

UnityのプラグインであるPlayMakerをあらかじめインストールしておきましょう。

はじめてPlayMakerを使用するひとは、あらかじめ以下の記事を一読することで、理解を深めることができます。

カメラの位置を調整する

Hierarchyウィンドウ上のMirrorを右クリックして、Create Emptyを選択します。

HierarchyウィンドウでCameraを今作ったEmptyにドラッグ&ドロップして、CameraをGameObjectの子オブジェクトにします。

CameraをGameObjectの子オブジェクトにする

CameraをGameObjectの子オブジェクトにする

Mirrorを対称面としてCameraを対称移動して、CameraがMirrorの表側にくるように、CameraがMirrorの方を向くように、Cameraの位置・角度を調整します。

Cameraの位置・角度を調整

Cameraの位置・角度を調整

PlayMakerを追加する

Hierarchyウィンドウ上のMirrorを右クリックして、Create Emptyを選択します。

わかりやすいように、今作ったEmptyの名前を「LookAt」に変更します。

作ったEmptyの名前を「LookAt」に変更

作ったEmptyの名前を「LookAt」に変更

Mirrorを選択して、InspectorウィンドウからAdd Componentをクリックして、PlayMakerFSMを追加します。

InspectorウィンドウからAdd Componentをクリック

InspectorウィンドウからAdd Componentをクリック


PlayMakerFSMを追加

PlayMakerFSMを追加

追加されたPlayMakerFSMのEditをクリックします。

PlayMakerFSMのEditをクリック

PlayMakerFSMのEditをクリック

State 1の名前を「Get Camera」に変更します。

Get Cameraを選択して、Action Browserを開き、二つの「Game Object Is Null」、「Find Game Object」、「Get Main Camera」を以下の画像の順で追加します。

Action Browserを開く

Action Browserを開く


Actionを追加

Actionを追加

Find Game ObjectのObject Nameに「[VRTK]_VIVE」を入力します。

Find Game ObjectのStoreにNew Variable…を選択して、「MainCamera」を設定します。

Find Game Objectを編集する

Find Game Objectを編集する

両方のGame Object Is NullのGame ObjectにMainCameraを選択します。

片方のGame Object Is NullのIs Not NullにNew Event…を選択して、「Found」を設定します。

Is Not Nullを設定すると赤文字で出てくる[Click to Add Transition to State]をクリックします。

もう片方のGame Object Is NullのIs Not NullにFoundを選択します。

Game Object Is Nullを編集する

Game Object Is Nullを編集する

Get Main CameraのStore Game Objectに、MainCameraを設定します。

Get Main Cameraを編集する

Get Main Cameraを編集する

新しいStateを追加して、名前を「Mirror Reflection」に変更します。

Get Cameraの下についているFoundからMirror Reflectionへドラッグ&ドロップして矢印をつなげます。

Get Cameraの下についているFoundからMirror Reflectionへ矢印をつなげる

Get Cameraの下についているFoundからMirror Reflectionへ矢印をつなげる

Hierarchyウィンドウ上のMirrorを右クリックして、Create Emptyを選択します。

わかりやすいように、今作ったEmptyの名前を「point」に変更します。

Inspectorウィンドウから、pointのPositionのZの値を-1に変更します。

pointのPositionのZの値を-1に変更

pointのPositionのZの値を-1に変更

Mirror Reflectionを選択して、Action Browserから3つの「Get Position」、4つの「Vector3 Operator」、「Set Position」、「Look At」を以下の画像の順で追加します。

Actionを追加

Actionを追加

1つ目のGet PositionのVectorにNew Variable…を選択して「MirrorPos」を設定し、Every Frameにチェックを入れます。

2つ目のGet PositionのGame ObjectをUse OwnerからSpecify Game Objectに変更して、対象にpointを選択します。
VectorでNew Variable…を選択して、「PointPos」を設定し、Every Frameにチェックを入れます。

3つ目のGet PositionのGame ObjectをUse OwnerからSpecify Game Objectに変更して、対象にMainCameraを選択します。
Get PositionのVectorにNew Variable…を選択して、「CameraPos」を設定し、Every Frameにチェックを入れます。

Get Positionの編集

Get Positionの編集

1つ目のVector3 OperatorのVector 1にMirrorPos、Vector 2にCameraPosを選択します。
OperationにSubtractを選択します。
Store Vector3 ResultにCameraPosを選択し、Every Frameにチェックを入れます。

2つ目のVector3 OperatorのVector 1にMirrorPos、Vector 2にPointPosを選択します。
OperationにSubtractを選択します。
Store Vector3 ResultにPointPosを選択し、Every Frameにチェックを入れます。

3つ目のVector3 OperatorのVector 1にCameraPos、Vector 2にPointPosを選択します。
OperationにReflectを選択します。
Store Vector3 ResultにCameraPosを選択し、Every Frameにチェックを入れます。

4つ目のVector3 OperatorのVector 1にMirrorPos、Vector 2にCameraPosを選択します。
OperationにAddを選択します。
Store Vector3 ResultにCameraPosを選択し、Every Frameにチェックを入れます。

Vector3 Operatorの編集

Vector3 Operatorの編集

Set PositionのGame ObjectをUse OwnerからSpecify Game Objectに変更して、対象にLookAtを選択します。

Set PositionのVectorにCameraPosを選択します。

Set PositionのEvery Frameにチェックを入れます。

Set Positionの編集

Set Positionの編集

Look AtのGame ObjectをUse OwnerからSpecify Game Objectに変更して、対象にGameObjectを選択します。

Look AtのTarget ObjectにLookAtを選択します。

Look Atの編集

Look Atの編集

以上でPlayMakerを使って鏡をよりリアルにするための作業が完了しました。

実際の動作

実際の動作

PlayMakerを使えば、プログラミング言語を学習しなくてもUnityコンテンツを簡単に作成できます。

今回紹介した鏡以外にも、PlayMakerを使えばさまざまなことを表現できるので、皆さんもぜひPlayMakerを使ったシーン制作に挑戦してみてください。

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

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

STYLYアカウントを作成する

アカウント作成方法

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

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

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

Certified (QA) by Shota Shawn Yoshizawa
Edited by SASAnishiki