0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OSCでVRChatのキャラを回転操作するアプリを自作してみた!【OSC / フォームアプリケーション】

Last updated at Posted at 2024-01-12

はじめに

こんにちは。
ジョジョ好きなXRクリエイターの もふるね です。

今回は【知識0から】VRChatを別タブで操作できるアプリ自作してみた!【OSC / フォームアプリケーション】の続きです。
アプリを自作して楽しくなっちゃったので、回転機能も付けたくなっちゃった。

結果

ボタンで回転

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信号を送る処理を追加します。

Form1.Designer.cs
this.buttonUpperLeft.MouseDown += new System.Windows.Forms.MouseEventHandler(this.buttonUpperLeft_MouseDown);
this.buttonUpperLeft.MouseUp += new System.Windows.Forms.MouseEventHandler(this.buttonUpperLeft_MouseUp);
Form1.cs
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を出してー!
なんだいのび太くん、それならこれを使いなさい。 「 トラックバー

oscRotate02.jpg

トラックバーは、チャネル内のスライダー (サムとも呼ばれることもあります) とオプションの目盛りを含むウィンドウです。

ここでVRChatドキュメントのOSCのページを見てみます。
/input/LookHorizontalで回転ができるようです。
後ろにfloat型で-1をつけると左回転、1は右回転、0で無回転になります。

それでは、制作に入っていきましょう。
トラックバーでスライダーの位置が真ん中を基準0として、右に動かすほど1に、左に動かすほど-1に近い数値を送るようにします。
また、スライダーを離したら、スライダーが真ん中の位置に戻るようにします。
Form1.cs[デザイン]にトラックバーを追加し、名前を「trackBarLook」とします。
Form1.Designer.csにクリックしてる間と離した瞬間にイベントを発生させる処理を追加します。
Form1.csにVRChatで回転するOSC信号を送る処理を追加します。

Form1.Designer.cs
this.trackBarLook.Scroll += new System.EventHandler(this.trackBarLook_Scroll);
this.trackBarLook.MouseUp += new System.Windows.Forms.MouseEventHandler(this.trackBarLook_MouseUp);
Form1.cs
//初期値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#】

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?