using System.Collections; using System.Collections.Generic; using UnityEngine; using VRTK; public class OperationPanelForVR : MonoBehaviour { private Transform cameraEyeTF; private OperationCurvedUI operationCurvedUI; private Coroutine coroutine; private float waitTime = 3f; private string courseName; private AudioSource audioSource; private StepListProxy m_StepListProxy; [SerializeField] private bool m_IsLoadData = true; public Transform CameraEyeTF { get { if (cameraEyeTF == null) { cameraEyeTF = VRTK_DeviceFinder.HeadsetCamera(); } return cameraEyeTF; } } private void Awake() { audioSource = FindObjectOfType(); if (audioSource == null) { GameObject gameObject = new GameObject("AudioSource"); audioSource = gameObject.AddComponent(); } } /// /// 获取检修的所有步骤信息 /// /// public void GetCourseStepMsg(string courseTitle) { if (m_IsLoadData) { courseName = courseTitle; m_StepListProxy = DAL.Instance.Get(); m_StepListProxy.ReadStepMsgInfoFromTable(courseName); } } /// /// 根据传进来的步骤ID展示当前步骤信息、音频等 /// /// public void OperationPanelByStepID(int stepID) { if (!m_IsLoadData) return; OperationStepDataInfo tmp_OperationStepDataInfo = m_StepListProxy.GetOperationStepDataInfoById(stepID); if (tmp_OperationStepDataInfo != null) { //步骤信息 if (!string.IsNullOrEmpty(tmp_OperationStepDataInfo.stepName)) { if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Practice) { if (CameraEyeTF && operationCurvedUI == null) { GameObject perfab = Resources.Load("UI/CurvedUIOpTip"); GameObject curvedUIGO = Instantiate(perfab, CameraEyeTF); operationCurvedUI = curvedUIGO.GetComponent(); } operationCurvedUI.gameObject.SetActive(true); operationCurvedUI.SetTipText(tmp_OperationStepDataInfo.stepName); if (coroutine != null) { StopCoroutine(coroutine); } coroutine = StartCoroutine(WaitTime()); } // 音频 if (!string.IsNullOrEmpty(tmp_OperationStepDataInfo.audioClipName)) { StartCoroutine(AudioHelper.LoadAudioClip(courseName, tmp_OperationStepDataInfo.audioClipName, AudioType.MPEG, LoadAudioCallBack)); } else { audioSource.Stop(); } } } } private IEnumerator WaitTime() { yield return new WaitForSeconds(waitTime); operationCurvedUI.gameObject.SetActive(false); } /// /// 加载音频回调 /// /// private void LoadAudioCallBack(AudioClip obj) { audioSource.clip = obj; audioSource.Play(); } }