バッテラが如く

プログラミングしましょ!

【Unity】モデルの1面だけにテクスチャを貼りたい

Unity (2021.3.2f1 - ビルトイン)

はじめに

モデルの1面だけにテクスチャを貼りたい場合にどうすればいいか?というのをずっと悩んでいました。

普通はそんな人はいないと思う(笑)

その1つの手法を解説したいと思います。

何をしたいのか?

例えばCubeにテクスチャを貼るとこのように全面にテクスチャが貼られます。

これはメッシュ単位で同一のテクスチャが使われるようになっているからです。

じゃあどうやって1面だけに貼るかというのが今回の課題です。

結論 (メッシュを分割する)

考えた結果1メッシュ1テクスチャにすればいいという結論になりました。

どういうことかというと、

メッシュを分割して別々にテクスチャを貼ればいいんじゃね?という発想が生まれました。

BlenderなどのモデリングソフトならともかくUnityでそれができるのか?という話なのですが、
Probuilderを使うとできる事がわかりましたので実際にやってみたいと思います。

ProbuilderはUnity標準アセットです。使い方については割愛します。

じゃあ実際にどうやるのかを実践してみたいと思います。

実践

Cubeの上面だけにテクスチャを貼るというのをやってみます。

Cubeを新規作成

新規でCubeを作成しテクスチャは貼らない状態にしておきます。

Probuilderize化

次にProbuilderWindowを開き、Cubeを選択しProbuiderlizeします。

Probuiderlize化するとUnity上でモデリング作業ができるようになります。

面をデタッチしてメッシュを分割

次はCubeの上面だけを選択 → Detach Faces を実行します。

そうすると、
見た目は全く変わっていないのですが、ヒエラルキーをみるとゲームオブジェクトが1つ増えています。

実は Cube (1) が上面だけのメッシュになっていて、元のCubeが上面がなくなったメッシュに変わっています。

Detach Facesをすると選択面を抜き出して個別のメッシュにすることができます。

下図は片方を消した状態でそれぞれスクショしたものです。

これで分割はできました。

分割面にテクスチャを貼る

分割した面にテクスチャを貼ってみたいと思います。

Cube (1)にマテリアルをつけてテクスチャをセットすると・・・

このように上面だけにテクスチャを貼る事ができました!

他の面はテクスチャを貼ってないわけですから表示はされません。

親を設定する

分離してしまった影響で移動や回転をさせる時にそれぞれのゲームオブジェクトで行わないといけなくなりました。

このままだと使いづらいので分離したゲームオブジェクトの親を1個作ります。

親を作るには ゲームオブジェクトを選択 → Create Empty Parentを実行します。

これで完成です。

あとがき

他のやり方としてはUV値を変えればテクスチャを貼ってないように見せる事はできるかもしれませんが、それって各頂点のUVのインデックスを把握しないといけないので現実的に難しい為そのやり方はなしとしました。