using System.Collections.Generic; using UnityEngine; using ChivaXR.Op; using ChivaXR.VR; using ChivaXR; using VRTK; using System; using UnityEngine.SceneManagement; using QFramework; public class HandHintManager : MonoBehaviour { public List list; public List toolList; public Transform hand; public List opHintGos = new List(); public VRTK_ControllerEvents leftController; public VRTK_ControllerEvents rightController; private InteractableHandHint handHint; private int stepID; /// /// 记录构建场景信息 /// private Dictionary m_RecordBuildSceneInfo = new Dictionary(); void Start() { handHint = GetComponent(); ProcessManagement.Instance.EnterProcessEvent += EnterProcessEvent; ProcessManagement.Instance.processElementDisActiveEvent += PrcessElementDisActiveEvent; } private void PrcessElementDisActiveEvent(ProcessElement processElement) { if (processElement == ProcessManagement.Instance.processes[ProcessManagement.Instance.processes.Count - 1]) { if (ProcessManagement.Instance.processes.Count - 1 == stepID) { LearningUIController.Instance.SetText("点击扳机返回主常见功能"); if (leftController == null && rightController == null) return; leftController.TriggerPressed += TriggerPress; rightController.TriggerPressed += TriggerPress; } } } private void OnDestory() { leftController.TriggerPressed -= TriggerPress; rightController.TriggerPressed -= TriggerPress; } private void TriggerPress(object sender, ControllerInteractionEventArgs e) { } private string GetBuildSceneName() { string sceneName = string.Empty; var m_BuildSettingsNumber = SceneManager.sceneCountInBuildSettings; for (int i = 0; i < m_BuildSettingsNumber; i++) { if (!m_RecordBuildSceneInfo.ContainsKey(i)) { string buildPath = SceneUtility.GetScenePathByBuildIndex(i); if (!string.IsNullOrEmpty(buildPath)) { //只获取场景名称 string temp = buildPath.Split('/')[buildPath.Split('/').Length - 1].Split('.')[0]; m_RecordBuildSceneInfo.Add(i, temp); } } } foreach (var item in m_RecordBuildSceneInfo.Values) { string[] temps = item.Split('_'); if (temps[temps.Length - 1].Equals("Practice")) { sceneName = item; } } return sceneName; } private void EnterProcessEvent(int stepID) { this.stepID = stepID; EnterProcess(); } private void EnterProcess() { var triggerElement = list[stepID].GetComponent(); var objElement = list[stepID].GetComponent(); for (int i = 0; i < toolList.Count; i++) { if (triggerElement)//扳机触发 { LearningUIController.Instance.SetText(triggerElement.operationDescription); if (toolList[i].GetComponent().CVR_ToolType == triggerElement.triggerElements[0].toolType) { handHint.InitInteractable(toolList[i], triggerElement.triggerElements[0].transform); } } else if (objElement)//直接触发 { handHint.InitInteractable(objElement.triggerObjs[0].GetComponent(), objElement.triggerObjs[0].transform, false); LearningUIController.Instance.SetText(objElement.operationDescription); } } } /// /// 工具提示图标 /// public void HandHintState(bool state, Vector3 pos) { //hand.gameObject.SetActive(state); //hand.position = new Vector3(pos.x, pos.y + 0.05f, pos.z - 0.05f); } /// /// 操作物提示图标 /// public void OperationHintState(Transform go, bool state) { if (go.Find("GameObject")) { var temp = go.Find("GameObject").gameObject; temp.SetActive(state); } } } public enum OpHintType { mabu, jiaodai, jiareqi }