OperationPanelForVR.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using VRTK;
  5. public class OperationPanelForVR : MonoBehaviour
  6. {
  7. private Transform cameraEyeTF;
  8. private OperationCurvedUI operationCurvedUI;
  9. private Coroutine coroutine;
  10. private float waitTime = 3f;
  11. private string courseName;
  12. private AudioSource audioSource;
  13. private StepListProxy m_StepListProxy;
  14. [SerializeField]
  15. private bool m_IsLoadData = true;
  16. public Transform CameraEyeTF
  17. {
  18. get
  19. {
  20. if (cameraEyeTF == null)
  21. {
  22. cameraEyeTF = VRTK_DeviceFinder.HeadsetCamera();
  23. }
  24. return cameraEyeTF;
  25. }
  26. }
  27. private void Awake()
  28. {
  29. audioSource = FindObjectOfType<AudioSource>();
  30. if (audioSource == null)
  31. {
  32. GameObject gameObject = new GameObject("AudioSource");
  33. audioSource = gameObject.AddComponent<AudioSource>();
  34. }
  35. }
  36. /// <summary>
  37. /// 获取检修的所有步骤信息
  38. /// </summary>
  39. /// <param name="_courseName"></param>
  40. public void GetCourseStepMsg(string courseTitle)
  41. {
  42. if (m_IsLoadData)
  43. {
  44. courseName = courseTitle;
  45. m_StepListProxy = DAL.Instance.Get<StepListProxy>();
  46. m_StepListProxy.ReadStepMsgInfoFromTable(courseName);
  47. }
  48. }
  49. /// <summary>
  50. /// 根据传进来的步骤ID展示当前步骤信息、音频等
  51. /// </summary>
  52. /// <param name="stepID"></param>
  53. public void OperationPanelByStepID(int stepID)
  54. {
  55. if (!m_IsLoadData) return;
  56. OperationStepDataInfo tmp_OperationStepDataInfo = m_StepListProxy.GetOperationStepDataInfoById(stepID);
  57. if (tmp_OperationStepDataInfo != null)
  58. {
  59. //步骤信息
  60. if (!string.IsNullOrEmpty(tmp_OperationStepDataInfo.stepName))
  61. {
  62. if (OperateSetting.Instance.m_CurrentOperationMode == OperationMode.Practice)
  63. {
  64. if (CameraEyeTF && operationCurvedUI == null)
  65. {
  66. GameObject perfab = Resources.Load<GameObject>("UI/CurvedUIOpTip");
  67. GameObject curvedUIGO = Instantiate(perfab, CameraEyeTF);
  68. operationCurvedUI = curvedUIGO.GetComponent<OperationCurvedUI>();
  69. }
  70. operationCurvedUI.gameObject.SetActive(true);
  71. operationCurvedUI.SetTipText(tmp_OperationStepDataInfo.stepName);
  72. if (coroutine != null)
  73. {
  74. StopCoroutine(coroutine);
  75. }
  76. coroutine = StartCoroutine(WaitTime());
  77. }
  78. // 音频
  79. if (!string.IsNullOrEmpty(tmp_OperationStepDataInfo.audioClipName))
  80. {
  81. StartCoroutine(AudioHelper.LoadAudioClip(courseName, tmp_OperationStepDataInfo.audioClipName, AudioType.MPEG, LoadAudioCallBack));
  82. }
  83. else
  84. {
  85. audioSource.Stop();
  86. }
  87. }
  88. }
  89. }
  90. private IEnumerator WaitTime()
  91. {
  92. yield return new WaitForSeconds(waitTime);
  93. operationCurvedUI.gameObject.SetActive(false);
  94. }
  95. /// <summary>
  96. /// 加载音频回调
  97. /// </summary>
  98. /// <param name="obj"></param>
  99. private void LoadAudioCallBack(AudioClip obj)
  100. {
  101. audioSource.clip = obj;
  102. audioSource.Play();
  103. }
  104. }