using System; using UnityEngine; namespace WildAttack { /// /// 准星ui /// public class CrossHair : MonoBehaviour { #region Members public static CrossHair instance; /// /// 瞄准器,基于其位置发射射线,射线的hitpoint转屏幕坐标,该坐标即准心坐标 /// public Transform aimTransform; /// /// 是否限制瞄准器在屏幕范围内 /// public bool limitAimInScrren; public RectTransform _rectTransform; private RectTransform _canvasRectTransform; #endregion #region Lifecycle void Awake() { instance = this; _rectTransform = GetComponent(); _canvasRectTransform = GetComponentInParent().GetComponent(); } public void LateUpdate() { UpdateCrossHairPosition(GameMananger.GetInstance().hitPoint); // 不同射击模式 //ShootTypeEnum type = GameMananger.GetInstance().GetShootType(); //if ( type == ShootTypeEnum.FixedScreen ) { // //if (limitAimInScrren) aimTransform.eulerAngles = LimitAngles(aimTransform.eulerAngles); // hitPoint = CrossHairTransRaycast(); // UpdateCrossHairPosition(hitPoint); //} //else if ( type == ShootTypeEnum.FixedCrossHair ) { // Camera.main.transform.LookAt(CrossHairTransRaycast()); //} //else if ( type == ShootTypeEnum.moreScreen ) { // hitPoint = CrossHairTransRaycast(); // UpdateCrossHairPosition(hitPoint); // CheckCrossHair(); //} } #endregion #region Functions public void UpdateCrossHairPosition(Vector3 hitPoint) { Vector2 viewPoint = Camera.main.WorldToViewportPoint(hitPoint); _rectTransform.localPosition = (viewPoint - Vector2.one * 0.5f) * _canvasRectTransform.rect.size; } public void ResetCrossHair() { _rectTransform.anchoredPosition = new Vector2(_canvasRectTransform.rect.width / 2, _canvasRectTransform.rect.height / 2); } #endregion } }