using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; public class RecordVoiceUI : MonoBehaviour { [SerializeField] GameObject effects; /// /// 语音输入的按钮 /// [SerializeField] private Button m_VoiceInputBotton; /// /// 录音按钮的文本 /// [SerializeField] private Text m_VoiceBottonText; /// /// 录音的提示信息 /// [SerializeField] private Text m_RecordTips; public Button stopBtn; public AudioRecorder voiceInputs; public CarAssistant carAssistant; public event UnityAction onStartListen; public event UnityAction onStopListen; private void Awake() { } // Start is called before the first frame update void Start() { effects.gameObject.SetActive(false); RegistButtonEvent(); carAssistant.onReceiveText += SetRecordTips; stopBtn.onClick.AddListener(StopPlay); stopBtn.gameObject.SetActive(false); carAssistant.statusManager.onCurrentStatusChanged += (s) => { if (s == carAssistant.statusManager.talking) { stopBtn.gameObject.SetActive(true); } else { stopBtn.gameObject.SetActive(false); } }; } // Update is called once per frame void Update() { if(carAssistant.statusManager.currentState == carAssistant.statusManager.listening) { if (!effects.active) { effects.SetActive(true); } } else { if (effects.active) { effects.SetActive(false); } } } public void SetRecordTips(string _msg) { m_RecordTips.text = _msg; StartCoroutine(SetTextVisible(m_RecordTips)); } private IEnumerator SetTextVisible(Text _textbox) { yield return new WaitForSeconds(3f); _textbox.text = ""; } public void StopPlay() { if(carAssistant.statusManager.currentState == carAssistant.statusManager.talking) carAssistant.statusManager.MakeTransition(carAssistant.statusManager.idle); } /// /// 注册按钮事件 /// private void RegistButtonEvent() { if (m_VoiceInputBotton == null || m_VoiceInputBotton.GetComponent()) return; EventTrigger _trigger = m_VoiceInputBotton.gameObject.AddComponent(); //添加按钮按下的事件 EventTrigger.Entry _pointDown_entry = new EventTrigger.Entry(); _pointDown_entry.eventID = EventTriggerType.PointerDown; _pointDown_entry.callback = new EventTrigger.TriggerEvent(); //添加按钮松开事件 EventTrigger.Entry _pointUp_entry = new EventTrigger.Entry(); _pointUp_entry.eventID = EventTriggerType.PointerUp; _pointUp_entry.callback = new EventTrigger.TriggerEvent(); //添加委托事件 _pointDown_entry.callback.AddListener(delegate { StartRecord(); }); _pointUp_entry.callback.AddListener(delegate { StopRecord(); }); _trigger.triggers.Add(_pointDown_entry); _trigger.triggers.Add(_pointUp_entry); } void StartRecord() { m_VoiceBottonText.text = "listening..."; effects.gameObject.SetActive(true); if (onStartListen != null) onStartListen(); } void StopRecord() { m_VoiceBottonText.text = "hold to talk"; m_RecordTips.text = "identifying..."; effects.gameObject.SetActive(false); if (onStopListen != null) onStopListen(); } }