バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事は、VRChatワールドでベッドの高さコライダーなどを調整するUdonスクリプトについての記事です。
動作確認した最新バージョンは Unity 2022.3.22、VRChat SDK 3.9.0 です。
やりたいこと:ベッドの高さをUdonで調整したい
ワールドに私のモデルを配置して添い寝できるようにしているけど、高さ調整ができるようにしたい。
高さが合わないと顔が見えず、VR生活のQOLが下がってしまいますΣ(゚Д゚)
まぁQuestのガーディアンで調整できるけど、微調整できると嬉しいですね。
ChatGPT氏に聞いてみる
とりあえずChatGPT氏に聞いてみたら良い感じにUdonスクリプトを提案してくれた。
指定したオブジェクトのコライダーをトランスフォームごと上げるやつ MoveUpOnInteract.cs
コライダーだけ上げようと思ったけど、なんかエラーが出たのでオブジェクトのトランスフォームごと上げるようにした。
using UnityEngine;
using UdonSharp;
public class MoveUpOnInteract : UdonSharpBehaviour
{
public Transform targetObject; // 対象のオブジェクトをインスペクターで指定
public float increment = 0.1f; // 上昇量
public float maxY = 1.0f; // 上限(Y位置)
public override void Interact()
{
if (targetObject == null) return;
Vector3 pos = targetObject.localPosition;
pos.y = Mathf.Min(pos.y + increment, maxY);
targetObject.localPosition = pos;
}
}
このスクリプトを付けたオブジェクトにインタラクトして発動するので、上げたいオブジェクト自身か距離が近いオブジェクトに割り当てると良い。
↓こんな感じで上げられます。
ちょっと上がりすぎだけどw上限が設定できるので適宜設定してください。
逆に下げるやつ
下げるやつもあります。
using UnityEngine;
using UdonSharp;
public class MoveDownOnInteract : UdonSharpBehaviour
{
public Transform targetObject; // 対象オブジェクトを指定
public float decrement = 0.1f; // 下げる量
public float minY = -1.0f; // 下限
public override void Interact()
{
if (targetObject == null) return;
Vector3 pos = targetObject.localPosition;
pos.y = Mathf.Max(pos.y - decrement, minY);
targetObject.localPosition = pos;
}
}
こんな感じで下がる。
上がるのと下がるのを組み合わせてベッドの高さを調整できるようにする
オブジェクトを二つ用意し、

上がるスクリプトと下がるスクリプトをアタッチして、ベッドのマットオブジェクトを指定しておく。


これで調整できた。
どのくらい上げ下げするのか、どこまで上げ下げするのかは数値をいじればできるので適宜調整してください。
本当はUIパネルを作って操作したかったが…
これUIパネルを作って操作したかったけど、なんかエラーが出てダメでしたね(-_-;)
この方式のほうが簡単にすぐ動いたのでとりあえずこれで。
また今度挑戦してみますw
おわりに
案外手軽にできて良かった。
まぁ参考程度にして、数値を調整したり良い感じに使ってみてください。
また何かあれば追記します(*^_^*)


