はじめに
こんにちは。
ジョジョ好きなXRクリエイターの もふるね です。
今回は【知識0から】VRChatを別タブで操作できるアプリ自作してみた!【OSC / フォームアプリケーション】の続きです。
アプリを自作して楽しくなっちゃったので、回転機能も付けたくなっちゃった。
結果
VRChatのキャラ操作できる自作アプリ
— もふるね𓇶 (@mofurune_k) January 9, 2024
ボタンorスライダーで回転できるようになった! pic.twitter.com/IdivgqatoE
ボタンで回転
VRChatドキュメントのOSCのページを見てみます。
/input/LookLeft 1
で左回転、/input/LookRight 1
で右回転するようです。
ただし、これを送っただけでは回転し続けてしまいます。
回転を止めるためには、それぞれ/input/LookLeft 0
、/input/LookRight 0
を送ります。
それでは、左回転するボタンの制作に入っていきましょう。
ボタンを押す瞬間に1を、離した瞬間に0を送るように作ります。
Form1.cs[デザイン]にボタンを追加し、名前を「buttonUpperLeft」とします。
Form1.Designer.csにクリックした瞬間と離した瞬間にイベントを発生させる処理を追加します。
Form1.csにVRChatで左回転するOSC信号を送る処理を追加します。
this.buttonUpperLeft.MouseDown += new System.Windows.Forms.MouseEventHandler(this.buttonUpperLeft_MouseDown);
this.buttonUpperLeft.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonUpperLeft_MouseUp);
private void buttonUpperLeft_MouseDown(object sender, MouseEventArgs e)
{
label1.Text = "入力:⟲";
Console.WriteLine("入力:⟲左回り");
// OSC送信
oscSender.Send(new OscMessage("/input/LookLeft", 1));
}
private void buttonUpperLeft_MouseUp(object sender, MouseEventArgs e)
{
// OSC送信
oscSender.Send(new OscMessage("/input/LookLeft", 0));
}
右回転も同様にして作れます。
トラックバーで回転
ボタンで回転するのはデメリットがあります。
・信号の強度を変えれない(ゆっくり回転できない)
・右回転左回転のボタンをそれぞれ押さないといけないので面倒(一つのボタンで右左どっちも回転したいなぁ)
ドラえも~ん!ボタンより使いやすいUIを出してー!
なんだいのび太くん、それならこれを使いなさい。 「 トラックバー 」
トラックバーは、チャネル内のスライダー (サムとも呼ばれることもあります) とオプションの目盛りを含むウィンドウです。
ここでVRChatドキュメントのOSCのページを見てみます。
/input/LookHorizontal
で回転ができるようです。
後ろにfloat型で-1をつけると左回転、1は右回転、0で無回転になります。
それでは、制作に入っていきましょう。
トラックバーでスライダーの位置が真ん中を基準0として、右に動かすほど1に、左に動かすほど-1に近い数値を送るようにします。
また、スライダーを離したら、スライダーが真ん中の位置に戻るようにします。
Form1.cs[デザイン]にトラックバーを追加し、名前を「trackBarLook」とします。
Form1.Designer.csにクリックしてる間と離した瞬間にイベントを発生させる処理を追加します。
Form1.csにVRChatで回転するOSC信号を送る処理を追加します。
this.trackBarLook.Scroll += new System.EventHandler(this.trackBarLook_Scroll);
this.trackBarLook.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBarLook_MouseUp);
//初期値50, min0, max100のスライダー
private void trackBarLook_Scroll(object sender, EventArgs e)
{
//0から100の値が入る
int sliderValue = trackBarLook.Value;
//0から100の値を-1から1の値になるように変換する
float vrcSliderValue = ((float)sliderValue - 50) / 50;
label1.Text = $"Value: {vrcSliderValue}";
Console.WriteLine($"Value: {vrcSliderValue}");
// OSC送信
oscSender.Send(new OscMessage("/input/LookHorizontal", vrcSliderValue));
}
//スライダーを離すと値が50に戻る
private void trackBarLook_MouseUp(object sender, MouseEventArgs e)
{
trackBarLook.Value = 50;
label1.Text = "Value: 0";
Console.WriteLine("Value: 0");
// OSC送信
oscSender.Send(new OscMessage("/input/LookHorizontal", (float)0));
}
振り返り
動作確認で回りすぎて酔った。
OSC記事まとめ
OSC解説記事
【OSC何も分からん人向け】OSCでVRChatを操作してみよう!
OSCアプリを自作した記事1
【知識0から】VRChatを別タブで操作できるアプリ自作してみた!【OSC / フォームアプリケーション】
OSCアプリを自作した記事2
OSCでVRChatのキャラを回転操作するアプリを自作してみた!【OSC / フォームアプリケーション】
OSCアプリを自作した記事3
CPU使用率をOSC通信でVRChatに送って、アバターの色を変化させてみた
OSCアプリを自作した記事4
GPU使用率の取得方法【C#】