本日は Blender と Unity の技術調査枠です。
前回、UIパネルにテクスチャを反映する方法を試してみました。今回はこれの番外編です。
bluebirdofoz.hatenablog.com
目の前にデバッグ用に作成したタブレットの3Dモデルがあるのに、UIパネルに写真を表示するのは味気ないです。
今回はUIパネルではなく、タブレットモデルの画面部分にテクスチャを反映してみたいと思います。
まずは Blender で、タブレットモデルの画面部分を一枚のテクスチャを参照する形に修正します。

Unityで一つのオブジェクトのマテリアルを分割する方法の詳細については以下にまとめています。
bluebirdofoz.hatenablog.com
モデルを修正したら fbx 形式で出力して Unity に取り込みます。
デバッグ用タブレットと見分けがつくようデフォルト色を赤色に変更しています。

ゲームオブジェクトを選択すると、以下のような形です。
二つ目の「TabletProject_Gamen」が画面のマテリアルなので、このマテリアルのテクスチャを変更する必要があります。
(Materials 内の Element の順番と DynamicOccluded 以下の順番が異なるので注意。恐らく後者はアルファベット順?)
更に今回はUIとして見易くするため、該当シェーダを「UI/Default」に変更しています。

MeshRenderer の二つ目のマテリアルを変更するため、前回作成したマテリアルの変更処理を以下のように修正しました。
・CaptureTest.cs
/// <summary>
/// テクスチャをマテリアルに反映する
/// </summary>
public void RefMaterial(Texture2D texture)
{
// 反映用マテリアルを作成
changeMaterial = new Material(formatMaterial);
changeMaterial.SetTexture("_MainTex", texture);
// マテリアルリストを取得し、二つ目のマテリアルのみ変更する
Material[] materials = targetObject.GetComponent<MeshRenderer>().materials;
materials[1] = changeMaterial;
// マテリアルリストを反映
targetObject.GetComponent<MeshRenderer>().materials = materials;
}因みに下記サイトによると Renderer の Materials は個々には変更が反映されないようです。
kido0617.github.io
オブジェクトの参照を設定しなおして、HoloLens にインストールします。

HoloLens でアプリを起動します。デフォルト状態だと画面には何も表示されていません。

タップ操作を行うと……。

タブレットの画面部分に写真が反映されました。成功です。
……が、こういったディスプレイ的な使い方においては文字表示の容易さを考えると、パネルを使った方が使い勝手が良いですね。