VRChat のワールドオブジェクトを On/Off する方法

VRChat のワールドを作る上で、ミラーなどの表示・非表示を切り替えたいことってありますよね?その方法を紹介します! Udon# を使うけど簡単だからやってみてね!

VRChat ワールドの Unity プロジェクトを開いたところから説明します。「ワールドどうやって作るの?」っていう方はワールド制作の記事を読んでね!

まずは On/Off する対象のオブジェクトとスイッチとして使うオブジェクトを作りましょう。

Hierarchy からシーン内を右クリックして Create Empty を選んで空の GameObject を作ります。この中にスイッチなどのオブジェクトを作っていきます。

作った空オブジェクトの名前を GameObject から何か分かりやすいものに変えます。

ここでは On/Off an Object にしました。

次に On/Off する対象のオブジェクトを作るために On/Off an Object を右クリックして 3D Object から Sphere を選びます。

同じようにスイッチとして使うオブジェクトを作るために 3D Object から Cube を選びます。

Sphere や Cube を見やすい場所に並べ替えます。

次にスイッチの中身を作っていきます。

まずはこれから書くプログラムの置き場所を作るために Project から Assets を右クリックして Folder を選びます。

フォルダ名を分かりやすいものに変えましょう。ここでは On-Off-an-Object にしました。

次にスイッチとして使う Cube にプログラムを紐付けるために Hierarchy から Cube を選んで Unity 画面右側の Inspector から Add Component ボタンをクリックします。

検索欄に udon behaviour と入力し表示される Udon Behaviour を選びます。

コンポーネントとして Udon Behaviour (Script) が追加されるので、コンポーネント内の New Program ボタンをクリックします。

すると ⬇️ のように表示が変わるので Create Script ボタンをクリックします。

Create Script ボタンをクリックすると Explorer のウィンドウが開き保存する場所とファイル名を聞かれます。

ここでは場所は先ほど作ったフォルダ On-Off-an-Object を選び、ファイル名は OnOffSwitch としました。

ここまで行うとコンポーネントの表示は ⬇️ のようになります。

Unity の Project からフォルダを辿って生成されたスクリプトファイルを右クリックし Show in Explorer を選びます。

メモ帳などでスクリプトファイルを開くと ⬇️ のようなソースコードが書き込まれています。

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

public class OnOffSwitch : UdonSharpBehaviour
{
    void Start()
    {
        
    }
}

このソースコードに ⬇️ のように書き加えて上書き保存します。

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

public class OnOffSwitch : UdonSharpBehaviour
{
    [SerializeField] private GameObject targetObject;

    void Start()
    {
        
    }

    public override void Interact()
    {
        if (targetObject.activeSelf)
        {
            targetObject.SetActive(false);
        }
        else
        {
            targetObject.SetActive(true);
        }
    }
}

スクリプトファイルを保存して Unity に戻るとビルドが実行されます。

ビルドが完了すると Cube の On Off Switch (Script) コンポーネントに Target Object という項目が増えますので Sphere をドラッグ&ドロップします。

⬇️ のように Sphere がセットされます。

ここまでで完了です 🎉
余裕があったら Sphere や Cube の名前を変えておくと分かりやすくなります。

アップロードしたりローカルで実行してみて動作を確認してください。

サンプルワールド

今回の「Sphere を On/Off する」サンプルをワールドとしてアップロードしましたので、実際に動きを見たい場合は訪れてみてください!

World Functions by emu
https://vrchat.com/home/world/wrld_b798ad7b-8781-49e2-9ef1-aa6caedd3cca/info

ソースコードの解説

public class OnOffSwitch : UdonSharpBehaviour
{
    // On/Off 対象のオブジェクトをセットするための変数です
    [SerializeField] private GameObject targetObject;

    void Start()
    {
        
    }

    // VRChat 内で Cube を Use したときに処理される手続きを書きます
    public override void Interact()
    {
        // Sphere の On/Off 状態で分岐します
        if (targetObject.activeSelf)
        {
            // Sphere が On の時にここが実行されます

            // Sphere を Off にします
            targetObject.SetActive(false);
        }
        else
        {
            // Sphere が Off の時にここが実行されます

            // Sphere を On にします
            targetObject.SetActive(true);
        }
    }
}

Let’s enjoy this game!

ℹ️ component versions:

VRChat SDK - Base: 3.8.2
VRChat SDK - Worlds: 3.8.2
Unity version: 2022.3.22f1