質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1060閲覧

Unityで、外部音声ファイルにタイミングを合わせてLive2Dを再生したい。

LFR

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/09/04 06:21

前提・実現したいこと

 Unityで、Unityソフト外の音声ファイルを取得して再生し、再生時間を取得して時間に応じ、Live2DのAnimationを再生したいと思っています。
AnimationはAnimatorを用い、Triggerによって再生しようとしています。

発生している問題・エラーメッセージ

 Unityソフト外の音声ファイルの再生、及び再生時間の取得は出来ました。
しかし、取得した再生時間に応じてAnimationを再生することが出来ません。音声の再生が終わってから思い出したように動きました。

該当のソースコード

Live2Dモデルに追加したScript

Unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5using System.IO; 6using System; 7using System.Text; 8using System.Text.RegularExpressions; 9using UnityEngine.UI; 10 11using Live2D.Cubism.Core; 12using Live2D.Cubism.Framework.Motion; 13 14public class Live2dModelScript : MonoBehaviour 15{ 16 AudioSource audioSource; 17 18 private float AudioTime; 19 private float TimeCount= 0.5; 20 21 private Animator anim = null; 22 23 void Start() 24 { 25 UnityEngine.Screen.SetResolution(1280, 960, false); 26 anim = GetComponent<Animator>(); 27 audioSource = GameObject.Find("AudioSource").GetComponent<AudioSource>(); 28 } 29 30 private void Update() 31 { 32 if (Model == null) 33 { 34 Debug.LogError("Modelが設定されていません"); 35 return; 36 } 37 38 if ((AudioTime = audioSource.time) > 0) 39 { 40 Debug.Log(AudioTime); 41 42 if(AudioTime > TimeCount) 43 { 44 if (TimeCount == 0.5) anim.SetTrigger("A1"); 45 TimeCount += 0.5; 46 } 47 } 48 } 49}
AudioSourceに追加したScript

Unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5using System.IO; 6using System; 7using System.Text; 8using System.Text.RegularExpressions; 9using UnityEngine.UI; 10 11using UnityEngine.Networking; 12 13public class AudioScript : MonoBehaviour 14{ 15 InputField inputField; 16 AudioSource audioSource; 17 18 void Start() 19 { 20 inputField = GameObject.Find("TextInput").GetComponent<InputField>(); 21 audioSource = GetComponent<AudioSource>(); 22 } 23 24 public void InputText() //InputFieldでEnterが押されたら実行する。 25 { 26 StartCoroutine("StreamPlayAudioFile", inputField.text + ".wav"); 27 } 28 29 IEnumerator StreamPlayAudioFile(string fileName) 30 { 31 using (WWW www = new WWW("file:///" + fileName)) 32 { 33 yield return www; 34 audioSource.clip = www.GetAudioClip(true, false); 35 audioSource.Play(); 36 } 37 } 38} 39

試したこと

  • Animationの遷移間隔は「0」にしています。
  • 上記Scriptが元々一つだったため、分けてみました。変化はなかったです。
  • ScriptからAnimationや各パラメータの数値を指定をしていた際には、タイミングはあっていました。

*しかし、望んだ通り綺麗に再生されず、Animator機能を用いることにしました。

  • LateUpdate()、Update()も変えてみました。変化はなかったです。

補足情報(FW/ツールのバージョンなど)

OS:Windows10
Unity:2019.2.12f1

 このようなサイトでの質問が不慣れなため、足りない情報などありましたら教えていただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問