using GCSeries.Core.Input; using QFramework; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using XMLTool; using static OperationController; public class Point3DItem : MonoBehaviour { Point3DQuestion.Data data; [SerializeField] private float rotSpeed = 180.0f; public void Init(Point3DQuestion.Data data) { this.data = data; if (string.IsNullOrEmpty(data.name) == false) { gameObject.name = data.name; } if (string.IsNullOrEmpty(data.deviceName)) { gameObject.transform.position = data.pos; gameObject.transform.eulerAngles = data.rotate; gameObject.transform.localScale = data.scale; } else { GameObject device = DeviceController.Instance.GetDeviceObj(data.deviceName); gameObject.transform.parent = device.transform; gameObject.transform.localPosition = Vector3.zero; gameObject.transform.localEulerAngles = Vector3.zero; gameObject.transform.localScale = Vector3.one; } rotSpeed = data.rotateSpeed; gameObject.GetComponent().sortingOrder = data.order; TypeEventSystem.Global.Register(OnObjDestroy); TypeEventSystem.Global.Register(OnStepChanged); #if VR UIRoot.Instance.transform.Find("ZStylus").GetComponent().OnObjectEntered.AddListener(OnObjEnter); UIRoot.Instance.transform.Find("ZStylus").GetComponent().OnObjectExited.AddListener(OnObjExit); UIRoot.Instance.transform.Find("ZStylus").GetComponent().OnClick.AddListener(OnClick); #endif } #if VR private void OnClick(ZPointer arg0, int arg1, GameObject arg2) { if (gameObject == arg2) { if (string.IsNullOrEmpty(data.clickEvent) == false) { StringEventSystem.Global.Send(data.clickEvent); } TypeEventSystem.Global.Send(); } } private void OnObjExit(ZPointer arg0, GameObject arg1) { if (gameObject == arg1) { isEnter = false; } } private void OnObjEnter(ZPointer arg0, GameObject arg1) { if (gameObject == arg1) { isEnter = true; } } bool isEnter = false; private void Update() { if (isEnter) { transform.Rotate(Vector3.forward * Time.deltaTime * rotSpeed); } } #endif private void OnStepChanged(StepStatusOnChange change) { OnObjDestroy(default); } private void OnObjDestroy(OnPoint3DQuestionDestroy destroy) { if (gameObject != null) { GameObject.Destroy(gameObject); } } private void OnDestroy() { TypeEventSystem.Global.UnRegister(OnStepChanged); TypeEventSystem.Global.UnRegister(OnObjDestroy); } private void OnMouseUpAsButton() { if (string.IsNullOrEmpty(data.clickEvent) == false) { StringEventSystem.Global.Send(data.clickEvent); } TypeEventSystem.Global.Send(); } private void OnMouseOver() { transform.Rotate(Vector3.forward * Time.deltaTime * rotSpeed); } }