はじめに
みなさんは、下の写真のような、ミクランドなどのライト設定がされたルームに行ったことはありますか!?
キャラクターが背景に溶け込んで、”そこにいる”感が増しますよね!
ただ、この設定は、現状ではユーザーに公開されている機能では使用できず、VC公式でのみ使用できる機能となっています
この記事では、そのライト設定を、”限定的”ではありますが、個人のルームで使用してみたというご紹介になります
限定的にライト設定を使用する仕組み
下の写真が実際にライト設定を使用した例です
先ほどの写真と同様に、キャラクターが背景に溶け込んでいることがわかります
こちらの仕組みは、至って簡単で、「ライト設定がされたロケーションの上空に、アイテムとしてオブジェクトを配置」しています
上の写真では、VC公式から配布されているお座敷 ライト設定版をロケーションとして設定し、その上空100mあたりにコライダーアイテムなどを設置して、ロケーションとして見るようにしました
下図のように、Unity上で、オブジェクトをY:100mの位置に置き、vci.ResetRootTransform()にて、ロード時に100m上空にロケーションのように見せたいアイテムが設置されるようにしました
今回使用した「お座敷のロケーション」は、天井近くのライト設定が、上空までそのまま伸びており、XZ平面で、お座敷の中央あたりが少し明るく、お座敷の隅のほうが少し暗くなります
これを利用して、建物の外に近いところが明るく、建物奥のほうが暗くなるように、オブジェクトの位置を調整しました
お座敷のロケーションと分かりにくくする工夫
ルームに入った瞬間に、お座敷のロケーションが見えてしまうと、ルームの体験として少し興ざめしてしまう恐れがあります
そこで、ルームのロケーションの読み込みが完了し、ローディングスペースから、お座敷に移動した瞬間に、上空の建物に移動するアイテムを設定しました
このアイテムは、ロケーションの読み込みが完了した瞬間に、実行されるよう、スクリプトとテレポート位置指定用の空オブジェクトのみの最小限の構成となっています
用意したスクリプトは以下の通りです
vci.ResetRootTransform()
local myLocalPlayer
local function initialize()
myLocalPlayer = vci.vc.room.GetLocalPlayer()
end
initialize()
function updateAll()
local myPos = myLocalPlayer.GetPosition()
if myPos.y < 80 or myPos.y > 115 then
myLocalPlayer.GetRoomPlayerController().TeleportTo(
vci.assets.GetTransform("TeleportPos").GetPosition(),
vci.assets.GetTransform("TeleportPos").GetRotation()
)
end
end
テレポート処理は、initialize関数に入れてもよいのですが、上空に設置したオブジェクトに、プレイヤーが落ちないような囲いコライダーを用意してなかったので、誤って落ちてしまった際のために、updateAll処理にてテレポートチェックを回しています
こちらのアイテムを設置することで、ルームを探索したりしない限り、「お座敷のロケーション」と気づかないようにすることができます
おわりに
いかがでしたか!?
現在、ユーザー側で使えるライト設定の方法をご紹介しました
みなさんもよろしければ、「お座敷のロケーション」を利用した、ライト設定のルームを作ってみてくださいね!



