using System.Collections; using System.Collections.Generic; using UnityEngine; using SmartBowSDK; using System; using UnityEngine.UI; public class ShootingEvent : MonoBehaviour { private SmartBowHelper smartBowHelper; /// /// 瞄准器,基于其位置发射射线,射线的hitpoint转屏幕坐标,该坐标即准心坐标 /// public Transform aimTransform; /// /// 是否限制瞄准器在屏幕范围内 /// public bool limitAimInScrren; private RectTransform _rectTransform; private RectTransform _canvasRectTransform; bool shooting = false; void Awake() { _rectTransform = GetComponent(); _canvasRectTransform = GetComponentInParent().GetComponent(); } void Start() { //#if UNITY_ANDROID // //smartBowHelper = new SmartBowHelper(); // //SmartBowHelper.GetInstance().StartShootingSensor(); // //SmartBowHelper.GetInstance().StartMagCalibration(); // //SmartBowHelper.GetInstance().OnFunctionKeyPress += OnFunctionKeyPress; // //SmartBowHelper.GetInstance().OnRotationUpdate += OnRotationUpdate; // //SmartBowHelper.GetInstance().OnFunctionKeyLongPress += OnFunctionKeyLongPress; // //SmartBowHelper.GetInstance().OnShooting += OnShooting; //#endif // InitForLimitBound(); } void LateUpdate() { #if UNITY_ANDROID //if (limitAimInScrren) aimTransform.eulerAngles = LimitAngles(aimTransform.eulerAngles); //UpdateCrossHairPosition(); #else Vector3 pos = new Vector3(Input.mousePosition.x - Screen.width * 0.5f, Input.mousePosition.y - Screen.height * 0.5f, 0); _rectTransform.localPosition = pos; #endif } private Vector2 _point; public void OnPositionUpdate(Vector2 point) { _point = point; //Debug.LogWarning($"OnPositionUpdate point={point}"); var viewPoint = Camera.main.ScreenToViewportPoint(point); var width = _canvasRectTransform.sizeDelta.x; var height = _canvasRectTransform.sizeDelta.y; point.x = width * viewPoint.x; point.y = height * viewPoint.y; var uiPos = new Vector3(point.x - width * 0.5f, point.y - height * 0.5f, -275f); //Debug.LogWarning($"uiPos={uiPos}"); _rectTransform.localPosition = uiPos;//准心UI位置 } //射箭的监听 public void OnShooting() { shooting = true; var worldPoint = Camera.main.ScreenToWorldPoint(_point); //var rayGo = new GameObject("Ray"); //rayGo.transform.position = worldPoint; //var ray = Camera.main.ScreenPointToRay(_point); UpdateCrossHairPosition(); } /// /// 判断是否打中UI按钮 /// /// public bool ShootUIBtn() { var ray = new Ray(transform.position, transform.forward); RaycastHit hitInfo; if (Physics.Raycast(ray, out hitInfo)) { var go = hitInfo.transform.gameObject; if (go.GetComponent