前回のStepでは、CubeをInteractするたびに、Spot Lightの点灯と消灯を切り替えられるようにしました。
これでライトスイッチとしての基本的な動作は完成しています。
このステップでは、前回作ったライトスイッチに操作音を追加します。
つまり、CubeをInteractすると、Spot Lightの状態が切り替わると同時に、スイッチの操作音が鳴るようにします。
新しいきっかけを追加するわけではありません。同じInteractをきっかけに、ライトの切り替えと音の再生という、2つの変化を起こします。

どうして操作音を付けるんですか?

スイッチを操作したことがユーザーにわかりやすくなるからだよ
前回までのライトスイッチでも、ギミックとしては動いています。
ただし、ライトが照らしている場所が見えにくい場合は、スイッチを操作できたのか分かりにくいことがあります。
そこで操作音を加えると、「スイッチが反応した」ということが、音でも伝わるようになります。
このように、ユーザーの操作に対して返される反応を「フィードバック」と呼びます。
たとえば、現実のスイッチでも、押したときにボタンが動いたり、「カチッ」という音が鳴ったりしますよね。その反応によって、私たちはスイッチを押せたことを感じ取っています。
VRChatワールドのギミックでも、見た目や音によるフィードバックを加えることで、操作した手応えが生まれます。
- ライトスイッチに操作音を追加する
- ひとつのInteractから複数の変化を起こす
- 音によるフィードバックの役割を理解する
操作音を用意しよう
まずは、スイッチを押したときに鳴らす音声ファイルを用意します。
短いクリック音や、スイッチが切り替わる音などが使いやすいでしょう。
実際に家のスイッチをカチカチしてみて、スマホで録音しても構いません。外部サイトなどから音声素材を入手する場合は、利用規約を確認してください。
VRChatワールドで使用できるか、配布や商用利用が許可されているかも確認しておきましょう。
私が録音したスイッチ音のファイルのダウンロードリンクを貼っておきます。
これを使っていただいても構いません。ワールドで使用していただいてもOKです。ただし、素材そのものを再配布することはご遠慮ください。
操作音をUnityへ追加しよう
用意した音声ファイルを、UnityのProjectウィンドウへドラッグ&ドロップします。あらかじめ「Audio」というフォルダを作っておくとわかりやすいと思います。
Unityへ取り込まれた音声ファイルは、Audio Clipとして扱われます。Audio Clipは、再生する音そのものです。今回であれば、スイッチのクリック音がAudio Clipになります。

SwitchにAudio Sourceを追加しよう
Audio Clipを再生するためには、Audio Sourceが必要です。Audio Sourceは、音を再生するためのComponentです。

たとえるなら、CDプレイヤー(Audio Source)に、CD(Audio Clip)をセットして音を鳴らすような関係だね💿🎵

CDプレイヤーに音量や再生方法の設定があるように、Audio Sourceにも、音量、ループ再生、3D空間での聞こえ方など、音をどのように鳴らすかを決める設定があります。
今回は細かい設定には触れず、まずは「Audio ClipをAudio Sourceに設定して再生する」という基本だけを使います。
Hierarchyから、前回作ったLightSwitchのCubeを選択します。
Inspector下部のAdd Componentを押し、Audio Sourceを追加してください。これで、LightSwitchのCubeに音を再生するためのAudio Sourceが追加されました。

Audio Clipを登録しよう
追加したAudio SourceのAudioClip欄に、先ほどUnityへ取り込んだ音声ファイルを登録します。
ProjectウィンドウにあるAudio Clipを、Audio SourceのAudioClip欄へドラッグ&ドロップしてください。

これで、Audio Sourceが再生する音を指定できました。

CDプレイヤーにCDをセットした状態、ってことですね!
Play On AwakeをOFFにしよう
Audio Sourceには、Play On Awakeという項目があります。これは、ワールドが始まったときに自動で音を再生する設定です。
今回は、SwitchをInteractしたときだけ操作音を鳴らしたいので、Play On Awakeのチェックを外してください。チェックが入ったままだと、ワールドに入った直後に操作音が鳴ってしまいます。

スクリプトを修正する
Audio Sourceを指定できるようにする
次に、UdonSharpからAudio Sourceを操作できるようにします。
ProjectウィンドウにあるLightSwitchスクリプトをダブルクリックし、コードエディターで開きます。
前回のコードは、次のようになっています。
using UdonSharp;
using UnityEngine;
public class LightSwitch : UdonSharpBehaviour
{
public Light targetLight;
public override void Interact()
{
targetLight.enabled = !targetLight.enabled;
}
}
targetLightの下に、次の1行を追加してください。
public AudioSource switchAudio;
この1行は、Inspectorから、再生するAudio Sourceを指定できるようにするための記述です。

targetLightで操作するライトを指定できるようにしたのと同じ考え方ですね
Interactされたときに音を鳴らす
続いて、SwitchがInteractされたときに音を再生する処理を追加します。
ライトを切り替える行の下に、次の1行を追加してください。
switchAudio.Play();
switchAudioは、Inspectorから指定するAudio Sourceです。Play()は、そのAudio Sourceに登録されているAudio Clipを再生する処理です。
つまり、この1行は「指定したAudio Sourceから音を再生する」という意味です。
完成したコードは、次のようになります。
using UdonSharp;
using UnityEngine;
public class LightSwitch : UdonSharpBehaviour
{
public Light targetLight;
public AudioSource switchAudio;
public override void Interact()
{
targetLight.enabled = !targetLight.enabled;
switchAudio.Play();
}
}
コードを書き換えたら、Ctrl + Sを押して保存します。
Audio SourceをInspectorへ登録しよう
Unityへ戻り、HierarchyからLightSwitchのCubeを選択します。
Udon BehaviourのInspectorに、Switch Audioという新しい登録欄が表示されていることを確認してください。
同じCubeに付けたAudio Sourceを、Switch Audio欄へ登録します。
Audio SourceのComponent部分をドラッグしてもよいですし、LightSwitchのCube自体を欄へドラッグしても登録できます。

これで、スクリプトから操作するAudio Sourceを指定できました。
Inspectorでは、次の2つが登録されている状態になります。
Target Light:操作するSpot LightSwitch Audio:操作音を再生するAudio Source

ギミックのつながりを確認しよう
今回のLightSwitchには、次の役割があります。
LightSwitchのCube
├ Interactを受け取る
├ Spot Lightの状態を切り替える
└ Audio Sourceから操作音を鳴らす
ユーザーが操作するCubeを中心に、Spot LightとAudio Sourceがつながっています。
ここで大切なのは、ひとつのきっかけから、複数の変化を起こせるということです。今回のように処理を組み合わせることで、より手応えのあるギミックを作れるようになります。

Build & Testで確認しよう
設定ができたら、Build & Testでワールドを起動します。
ワールドに入ったら、次の順番で確認してください。
- Spot Lightが点灯している
- LightSwitchのCubeに近づく
- CubeをInteractする
- Spot Lightが消える
- 同時に操作音が鳴る
- もう一度CubeをInteractする
- Spot Lightが点灯し、再び操作音が鳴る
何度か繰り返し操作し、ライトと音の両方が正しく反応することを確認してください。
うまく動かないときの確認
ライトは切り替わるが、音が鳴らない
次の点を確認してください。
- LightSwitchにAudio Sourceが付いているか
- Audio Sourceの
AudioClip欄にオーディオファイルが登録されているか Play On AwakeがOFFになっているか- Udon Behaviourの
Switch Audio欄にAudio Sourceが登録されているか - コードに
switchAudio.Play();が追加されているか
ワールドに入った直後に音が鳴る
Audio SourceのPlay On Awakeが有効になっている可能性があります。Play On Awakeのチェックを外してください。

今回のギミックを振り返ろう

最後に今回作ったスイッチギミックを振り返ろう
今回完成したライトスイッチを、「きっかけ」と「変化」に分けてみましょう。
- きっかけ:CubeをInteractする。
- 変化:
- Spot Lightの点灯と消灯を切り替える
- Audio Sourceから操作音を再生する

Step 2では、ひとつのきっかけからライトを消しました。
Step 3では、現在の状態に応じて点灯と消灯を切り替えられるようにしました。
そして今回のStep 4では、さらに音を加え、ひとつのきっかけから複数の変化を起こすようにしました。
同じギミックでも、変化を少しずつ追加することで、より分かりやすく、手応えのある体験になります。
次はどんなギミックを作る?
今回の仕組みを応用すると、ライト以外のさまざまなギミックを作れます。
たとえば、次のようなものです。
- ミラーの表示と非表示を切り替える
- オブジェクトを出現・消滅させる
- 複数のライトをまとめて操作する
- ONとOFFで別の音を鳴らす
- Triggerの範囲に入ると自動でライトを点ける
- Animationを使ってドアを開閉する
音量や聞こえる距離、3D空間上での聞こえ方など、音を使ったギミックについては、別の記事で詳しく扱います。
まずは今回作ったライトスイッチのSpot LightやAudio Clipを変えて、どのような違いが生まれるか試してみましょう。
ギミックの基本は、これからも同じです。
何をきっかけにして、何を変化させるのか
作りたい演出をこの2つに分けることで、次に必要な処理を考えやすくなります。

難しいところもあったけど、楽しかったです✨

動くものが作れるとワールド制作も一段と楽しくなるよね😊




コメント