我有一個游戲物件,上面有五個音頻剪輯作為陣列 audio1,audio2,audio3..... 我還有一個文本物件 UserInput 現在 audio1 將首先播放并等待 UseInput 要求用戶回復男性或女性。如果回復是男性或女性,則繼續音頻 2 否則重復音頻 1。然后當音頻 2 播放時,預計用戶會給出是或否的答復。如果用戶回答是,則繼續進行音頻 3,如果答復為否,則重復音頻 2。這與 audio3,4,5 相同,但最終 audio5 中的 yes 回復將使用戶移動另一個場景。
我的問題是如何讓下一個音頻等待 userInput,以及如果用戶沒有回應,如何防止上一個音頻重復。
這是我失敗的嘗試
public AudioSource Voice;
public AudioClip[] allSpeech;
public Text userInput;
List<string> expectedResponse = new List<string>();
void Start()
{
expectedResponse.Add("male");
expectedResponse.Add("female");
Voice = GetComponent<AudioSource> ();
Voice.clip=allSpeech[0];
Voice.Play();
Invoke("firstResponse",Voice.clip.length);
}
void firstResponse(){
foreach (string x in expectedResponse)
{
if (userInput.text.Contains(x))
{
Voice.clip=allSpeech[1];
Voice.Play();
}
else
{
Voice.Play();
}
}
}
uj5u.com熱心網友回復:
- 使用
InputField代替Text。所以,OnValueChange和EndEdit活動供您檢查,如果用戶鍵入的東西。閱讀檔案了解詳細資訊。 - 使用
AudioSource.PlayOneShot(clip)打確切剪輯。AudioSource.Play()如果您使用多個剪輯,從代碼中看不出播放哪個剪輯。因此,您可以更輕松地控制 AudioSource 將要播放的內容。閱讀檔案。 - 一些提高代碼可讀性的優化:
- 初始化串列
List<string> expectedResponse = new List<string>{"male", "female"};- 或者如果您不更改串列,則最好使用陣列
- 使用自定義事件來控制狀態
- 初始化串列
uj5u.com熱心網友回復:
我認為您需要使用更通用的方式來控制應用程式的流程,這樣如果您的問題和答案發生變化,您就不必更改代碼。
因此,如果我正在創建此應用程式,我會按如下方式進行:
- 創建問題串列
- 創建預期答案串列。(List<List> 答案)
- 創建音頻剪輯串列
- 通過加載第一個問題和第一個音頻剪輯來初始化應用程式。
- 等待用戶輸入(InputField 不是文本)和提交(按鈕或 InputField 值改變)
- 使用 Answers 串列的第一個條目檢查用戶輸入值以查找可能的匹配項。
- 如果匹配,則加載第二個問題和第二個音頻剪輯,否則使用反饋或其他內容清除輸入欄位。
加載任何問題和音頻剪輯都可以通過一個簡單的函式呼叫來處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340635.html
