【cluster】「見えない〇〇」の作り方
序文
「目に見えない」ものの存在は謎や疑問を抱かせたり、神秘性を持ったり、あるいはそこから日常から離れた別の次元や世界を想像させ、コンテンツを面白くさせます。
なので今回はclusterで「通常見ることはできないが確かに存在するもの」の作り方について説明します。
作例
当方が作成したこちらのワールドに、そういったものが実装されています。
良ければ遊んでみてください。(宣伝)
作り方を説明するもの一覧
この記事では次の3つのものの作り方について説明します。
アウトラインが見えないアイテム
カメラに映らないオブジェクト
特定のもの越しでしか見えないオブジェクト
1. アウトラインが見えないアイテム
clusterのワールドではインタラクトできるアイテムの近くにいくとアウトラインが表示されるようになります。
わかりやすい反面、スイッチ等を隠したいときや雰囲気が台無しになってしまうときにはなんとしてでも消したいものです。
まずは原理について説明します。clusterのアウトライン表示はオブジェクトに設定されたMeshに沿って表示されます。また、アイテムにインタラクトするためのcolliderはmeshを必要としません。これらの性質を利用し、colliderだけを設定したObjectにmeshを追従させることでアウトラインを消したアイテムを実現することができます。
例えば、アイテムの「コンパス」であれば次のようになります。
hitboxにColliderとGrabbable Itemを、コンパスにParent Constraintコンポーネントをつけてhitboxに追従させています。
こんな風にすることで、アイテム選択時のアウトラインを非表示にすることができます。
2. カメラに映らないオブジェクト
UnityにはLayerという設定項目があります。
詳しい説明は省きますが、アバターやワールドはカメラに移したいけど、UIとかはカメラに映って欲しくないな、とか、アバターだけに光を当てたいな、とかそういったときに重宝する機能になります。
このLayerを利用することでカメラに映らないオブジェクトを作ることができます。作り方は簡単で、オブジェクトのLayerを例えば「UI」とかにすればclusterのカメラには映らなくなります。
3. 特定のもの越しでしか見えないオブジェクト
Unityのものの見え方をアレコレするにはシェーダーというものを使います。私はシェーダー屋さんではないので、あまりシェーダーには詳しくないのですが、とにかくシェーダーを使えば現実ではあり得ない表現をすることができます。
このシェーダーの機能の中に「ステンシル」という機能があります。
この、ステンシルという機能を使うことで、特定のマテリアル越し、あるいはオブジェクト越しでしか見えないオブジェクトを作ることができます。
詳細については、他の方が作成された記事を参照すると良いかと思われます。(自分には説明できないor説明しにくい)(断じて書いてて面倒くさくなったとかそういうわけではない)(本当だから!!!)
「Unity ステンシル」などと検索すると、イイ感じの記事がたくさんヒットします。先達に感謝感謝です。
結び
今回は3つの小ネタについて書きました。人間は見えたものに真っ先に飛びついてしまいがちなので、こういったものを使えば予想外の出来事を体験させることができます。どれもちょっとひと手間を加えるだけで実装できるお手軽なものなのでぜひぜひお試しください!