概要
ワールド内のギミックを起動する最も直感的で基本的な方法は「ボタン」です。プレイヤーがボタンをクリック(Interact)することで、ライトを点灯させたり、ドアを開けたり、ゲームを開始したりと、様々なアクションのきっかけを作ることができます。
本記事では、これまでに学んだ知識を総動員し、UdonSharpでインタラクティブなボタンを実装する具体的な手順を、複数の実践的なパターンに分けて解説します。
- ローカルボタン: 押したプレイヤーにだけ影響がある、最もシンプルなボタン。
- 同期トグルボタン: 押すたびにON/OFFが切り替わり、その状態が全プレイヤーで共有されるボタン。
- 一度だけ押せるボタン: ワールド内で一度しか実行できない処理を起動するボタン。
目次
Unityエディタでの基本設定(全パターン共通)
まず、ボタンとして機能するGameObjectをUnityエディタで準備します。ここでは例として、シンプルなキューブをボタンとして使用します。
- オブジェクトの作成: Hierarchyウィンドウで右クリックし、[3D Object] > [Cube] を選択してキューブを作成します。名前を「InteractiveButton」などに変更しておくと分かりやすいです。大きさや位置を調整してください。
- Colliderの確認: 作成したキューブには、デフォルトで
Box Colliderコンポーネントが付いてい ます。これがプレイヤーのクリックを検知するために必要です。 - Udon Behaviourの追加: ボタンオブジェクトを選択し、Inspectorウィンドウで [Add Component] をクリック。「Udon Behaviour」を追加します。
- スクリプトの割り当て: 対応するUdonSharpスクリプトを作成し、Udon Behaviourコンポーネントの
Program Sourceフィールドにドラッグ&ドロップで割り当てます。 - Interaction Textの設定: スクリプトを割り当てると、Inspectorに
Interaction Textフィールドが表示されます。ここに「押す」や「Click」などのテキストを入力します。これがプレイヤーに表示されるツールチップになり、この設定がないとInteractイベントは発火しません。

パターン1: ローカルボタン(サウンド再生ボタン)
押したプレイヤーのクライアントでのみサウンドを再生するボタンです。他のプレイヤーには影響を与えません。
スクリプト: LocalSoundButton.cs
using UdonSharp;
using UnityEngine;
public class LocalSoundButton : UdonSharpBehaviour
{
[Tooltip("クリック時に再生するオーディオソ ースを割り当てます。")]
public AudioSource targetSound;
public override void Interact()
{
// targetSoundが設定されている場合のみ処理を実行
if (targetSound != null)
{
targetSound.Play();
}
else
{
Debug.LogWarning("再生するサウンドが設定されていません。");
}
}
}
Unityでの設定
LocalSoundButton.csスクリプトを作成し、ボタンオブジェクトのUdon Behaviourに割り当てます。- シーン内に空のGameObjectを作成し、「SoundPlayer」などの名前を付けます。このオブジェクトに
AudioSourceコンポーネントを追加します。 AudioSourceコンポーネントのAudioClipに再生したい音声ファイルを割り当て、Play On Awakeのチェックは外しておきます。- ボタンオブジェクトのInspectorに戻り、
Local Sound ButtonコンポーネントのTarget Soundフィールドに、先ほど作成したAudioSourceを持つGameObjectをドラッグ&ドロップします。
これで、ボタンをクリックしたプレイヤーの環境でのみ、指定したサウンドが再生されるようになります。
パターン2: 同期トグルボタン(部屋の照明スイッチ)
