Uncategorized,VR,VRChat,VRCSDK3

VRChatのワールドで、設置したカメラからの映像をディスプレイに見立てたオブジェクトへ表示したい場合があります。

いつもやり方がわからなくなるため、メモします。

◇ カメラ映像を表示するものを作成する

プロジェクトの「Assets」→「Create」→「Render Texture」を指定してRender Textureを作成し、名前を付ける。

作成したRender Textureを選択してInspectorのSizeを調整する。例えば1280,720、1920,1080など。

Render Textureをシーン上に作ったディスプレイ(Cubeや取り込んだディスプレイのモデルなど)にドロップし、大きさや奥行き(表示されるように)を調整する。

◇ カメラを作成して設定する

Hierarchy のカメラを作りたい階層を選択して右クリックメニューから「Camera」を選択してシーンに新しくカメラを作成する。

作成したカメラを表示するものが映る位置へ移動させる。

作成したカメラのInspectorの「Target Texture」に作ったRender Textureを指定する。

カメラに表示したくないものがあれば、CameraのInspectorのCulling MaskでPlayerLocal、UI、UiMenu、reserved2などを指定する。reserved2はプレーヤーが使ってるカメラをマスクするときに使用する。

◇ ディスプレイの設定

作ったディスプレイ(Render Textureをドロップしたもの)のMaterialコンポーネントのShaderをUnlit → Textureに設定する。
これでカメラ映像が表示される。表示されない場合は奥行きを手前に調整する。

下の画像は宇宙船のアセットについてきたディスプレイのフレーム部分を再利用して、薄く作ったCubeをうまくディスプレイの位置に設置し、Render Textureを指定したもの。カメラには宇宙船とその向こうの土星の環が見える。

VR,VRChat,VRCSDK3

いつもやり方がわからなくなるためのメモです。

VRChat のワールドを作るときのSDK3とUdonSharpを使うボタン操作です。
各ソフトのバージョンは以下のとおりです。

  • Unity 2019.4.31f1
  • VRCSDK3-WORLD-2021.11.24.16.19
  • UdonSharp_v0.20.3

それぞれのパッケージをインポートします。今回は表示するカメラ映像を切り替えるためのボタンを作ります。

ディスプレイを2個設置していますが、1個にします。左に球体を置き、ボタンで映像を切り替えるようにします。

最終的には以下のようにします。上のボタンで1番目のカメラ映像を表示します。下のボタンで2番目のカメラ映像を表示します。

作り方です。
ボタンとする球体に「Udon Behaviour」を追加します。

プログラムソースは「New Program」で追加します。下のプルダウンからUdon C# Program Assetを選んでおきます。Udon Graph から変えておきます。

ボタンを押したときに、Cube_Display_1のActiveをTrueにしてCube_Display_2のActiveをFalseにします。

ソースコードを作成し、適当な場所に保存します。そのあとProgram ScriptをダブルクリックしてVisual Studioを起動します。

以下のように入力します。


using UdonSharp;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class Sphere_display_1 : UdonSharpBehaviour
{
    public GameObject Cube_Display_1;
    public GameObject Cube_Display_2;

    void Start()
    {
        
    }

    private void Interact()
    {
        if (!Networking.IsOwner(Networking.LocalPlayer, this.gameObject)) Networking.SetOwner(Networking.LocalPlayer, this.gameObject);

        SendCustomNetworkEvent(VRC.Udon.Common.Interfaces.NetworkEventTarget.All, "ChangeStreamDisplay");
    }

    public void ChangeStreamDisplay()
    {
        Cube_Display_1.SetActive(true);
        Cube_Display_2.SetActive(false);
    }
}

ボタンをもう1つ下に追加しコードを同じように追加します。
表示するものをトグルするため、Cube_Display_1.SetActive(false);とCube_Display_2.SetActive(true);を記載します。

Udon BehaviourにVisual Studioでコードを書いて保存した後に追加されている項目があります。Cube_Display_1、Cube_Display_2にUnityのHierachyから同名のオブジェクトをドラッグ・ドロップしてセットします。