【VRChat】クリップボードの内容を表示する平面オブジェクトを作ろうとした話【ChatGPT】

結果からお話しますが挫折しました。誰か同じシステムを作ったら教えてください。Boothで販売したら教えてください。買います(直球)。

まずは試行錯誤した形跡をご覧あれ。

・ChatGPTに「VRChatでアバターに組み込む形で、PCのスクリーンショットを撮る度に更新されるタブレットのようなものを作成したいので手順を教えてください。」と尋ねる。
・なんだかんだでSDKのBuilderにて「The following component types are found on the Avatar and will be removed by the client」とでてスクリプトが使えない
・スクリプトの記述にホワイトリストが存在し、どうにもならないとわかる
・OSCならホワイトリストに引っかからないと理解し、最初から考え始める(今ここ

で、ここから本題。ぶっちゃけOSCが理解できてないので、ChatGPTの解読ができなかったので、本文を載せさせてもらいます。これを基にシステムを作成する勇者求む。


Q.VRChat上でアバターに設置する平面に、PC(Windows)のクリップボードの更新を感知し、その度にクリップボードの内容を表示するシステムをSDKのホワイトリスト(https://docs.vrchat.com/docs/whitelisted-avatar-components)に沿うようにOSCを利用して作成してください。

A.このようなシステムを作成するには、いくつかの手順が必要になります。以下に示す手順に従って進めてください。

1.SDKの準備
最初に、VRChat SDKをダウンロードしてインストールします。これは、Unityエディタ上でアバターを作成するために必要なツールです。SDKをダウンロードしたら、Unityエディタを起動して、新しいプロジェクトを作成します。
2.OSCライブラリのインストール
OSCを利用するためには、OSCライブラリをインストールする必要があります。ここでは、OSCSharpを利用します。OSCSharpは、C#で書かれたOSCライブラリであり、Unityエディタでの使用に最適化されています。
3.平面の作成
次に、アバターに設置する平面を作成します。この平面は、クリップボードの内容を表示するためのキャンバスとして機能します。平面は、Unityの3Dオブジェクトの「Plane」を使用して作成することができます。平面を作成したら、必要に応じてサイズや位置を調整してください。
4.OSCコンポーネントの追加
次に、OSCコンポーネントを平面に追加します。OSCコンポーネントは、OSCメッセージを受信するためのものです。OSCコンポーネントは、ホワイトリストに含まれるので、追加することができます。
5.OSCメッセージの受信
OSCコンポーネントを追加したら、OSCメッセージを受信するためのスクリプトを作成します。OSCSharpを利用する場合、以下のようなスクリプトを作成することができます。

using UnityEngine;
using System.Collections;
using UnityOSC;

public class OSCReceiver : MonoBehaviour
{
    public string RemoteIP = "127.0.0.1";
    public int SendToPort = 7000;
    public int ListenerPort = 8000;
 
    private OSCServer myServer;
 
    void Start ()
    {
        // リスナーポートの設定
        myServer = new OSCServer(ListenerPort);
    }
 
    void Update ()
    {
        // OSCメッセージの受信
        OSCPacket packet = myServer.Receive();
        if (packet != null) {
            // OSCメッセージが届いたら処理する
            if (packet.IsBundle()) {
                // バンドルの場合
                ArrayList messages = packet.Values;
                foreach(OSCPacket subPacket in messages) {
                    ProcessMessage(subPacket);
                }
            } else {
                // 単一のメッセージの場合
                ProcessMessage(packet);
            }
        }
    }
 
    void ProcessMessage(OSCPacket packet)
    {
        // 受信したOSCメッセージを処理する
        if (packet.Address.Equals("/clipboard")) {
        // クリップボードの内容を取得する
        string clipboardText = GUIUtility.systemCopyBuffer;
   
    // 受信したOSCメッセージにクリップボードの内容を設定する
        ArrayList args = packet.Values;
        args[0] = clipboardText;

        // OSCメッセージを送信する
        OSCMessage message = new OSCMessage(RemoteIP, SendToPort, packet.Address, args);
        OSCClient client = new OSCClient(RemoteIP, SendToPort);
        client.Send(message);
    }
}

}

このスクリプトは、OSCメッセージを受信して処理するためのものです。ここでは、"/clipboard"というアドレスでメッセージを受信し、クリップボードの内容をOSCメッセージの引数に設定して送信するようになっています。

6.平面にスクリプトを追加
最後に、平面にスクリプトを追加します。平面を選択し、Inspectorウィンドウで「Add Component」をクリックして、作成したスクリプトを追加します。これにより、平面がクリップボードの更新を受信し、その内容を表示するようになります。

以上が、VRChat上でクリップボードの更新を感知し、平面に表示するシステムを作成する手順です。SDKのホワイトリストに沿うように、OSCを利用して作成しています。


ChatGPT-3で質問しているので、コードとしてまだエラーが起きるかもしれませんが、やってみる価値はあると思ってます。
自分でもOSCの理解を深めて作成できたらTwitterかnoteで報告できればいいなと思ってますので、よろしくお願いします。

この記事が気に入ったらサポートをしてみませんか?