Unityでオーディオクリップをキー入力で切り替えるスクリプトを書いた!OVRLipSyncも動いた

Unity
※記事内に広告が含まれています。

バーチャル3Dクリエイター神部まゆみです(*^-^*)

今日は動画作成用に、unityでオーディオクリップを切り替えるスクリプトを書いたよ。

自分用のやつだけど、誰かの参考になるかもしれないから公開しておきます。

作成と動作確認したバージョンはunity 2020.1.1です。

●PRスペース●

〇まゆみマート|BOOTH

BOOTHでVRoidテクスチャやVRChat向けオブジェクトなどを販売しています。いいねしてくれると励みになります(*^-^*)

キー入力でオーディオクリップを切り替えて再生するスクリプト

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class AudioSelect : MonoBehaviour
{
     public AudioClip audioClip1;
     public AudioClip audioClip2;
     public AudioClip audioClip3;
     public AudioClip audioClip4;
     public AudioClip audioClip5;
     
     private AudioSource audioSource;

     //呼び出し時に実行される関数
     void Start () {
          audioSource = gameObject.GetComponent<AudioSource>();
     }
 
     // Update is called once per frame
     void Update ()
     {
          //Qキーが押されたらオーディオクリップ1を再生
          if (Input.GetKeyDown(KeyCode.Q))audioSource.PlayOneShot(audioClip1);
          //Wキーが押されたらオーディオクリップ2を再生
          if (Input.GetKeyDown(KeyCode.W))audioSource.PlayOneShot(audioClip2);
          //Eキーが押されたらオーディオクリップ3を再生
          if (Input.GetKeyDown(KeyCode.E))audioSource.PlayOneShot(audioClip3);
          //Rキーが押されたらオーディオクリップ4を再生
          if (Input.GetKeyDown(KeyCode.R))audioSource.PlayOneShot(audioClip4);
          //Tキーが押されたらオーディオクリップ5を再生
          if (Input.GetKeyDown(KeyCode.T))audioSource.PlayOneShot(audioClip5);

     }
}

使い方

オーディオソースコンポーネントがあるオブジェクトにこのスクリプトをアタッチして、AudioClip1~5に音声ファイルを読み込めば準備OK。

Q、W、E、R、Tキーにそれぞれ対応してるから、実行画面でキーを押せばPlayOneShotで再生されます。

キー割り当てを変えたい場合は、unityのキーコードを見て変えてね。

KeyCode - Unity スクリプトリファレンス
Key codes returned by Event.keyCode. These map directly to a physical key on the keyboard.

実際に動かしたところ OVRLipSyncもちゃんと動いた

※音が出るので音量注意!

唇が動いてるのは、OVR LipSyncを入れてるからです。

OVR LipSyncのオーディオソースがあるオブジェクトにアタッチすれば、こうやって使えますよ(*^-^*)

OVR LipSyncはこちらの頭のいい先輩のページを参考にして導入したよ。

2025/02/10追記:今使うならuLipSyncのほうが良いかも

OvrLipSyncはもうアップデートされておらず、いつ公開終了になるか分からないみたいなので、今使うならuLipSyncっていうやつのほうが良いと思います。

セットアップすれば自然な感じで勝手に口を動かしてくれます。

こちらのほうが自然に見えるかな?という感じはしますね。

追記: 前の音声をストップさせて切り替えたい場合は、 audioSource.Stop(); を使う

上のスクリプトだと、次の音声に切り替えても前の音声が再生されたままになってしまう。

短い音声ならあまり問題にはならないけど、長い音声だと被っちゃってうるさい感じになっちゃいます( ̄▽ ̄;)

前の音声をストップさせて次の音声を再生したい場合は、audioSource.Stop(); を使うと良いです。

全文は載せないけど、

//Qキーが押されたらオーディオクリップ1を再生

if(Input.GetKeyDown(KeyCode.Q))

{

    audioSource.Stop();

    audioSource.PlayOneShot(audioClip1);

}

みたいな。

PlayOneShotの前で、オーディオソースを一旦ストップさせればOKってこと。

ただ停止させてから再生まで若干ラグがある感じ?まぁそこまで気にならないレベルではあるけど。

参考にできるところがあれば参考にしてね。

タイトルとURLをコピーしました