Beispiel #1
0
    /// <summary>
    /// 通知Hud
    /// </summary>
    private void MessageToHudCrosShairSize()
    {
        Camera cam = CameraManager.GetInstance()?.GetMainCamereComponent()?.GetCamera();

        if (cam != null)
        {
            MsgPlayerWeaponCrosshair_ShotGun crosshair = new MsgPlayerWeaponCrosshair_ShotGun();
            float horFOV = cam.fieldOfView * cam.aspect;
            float verFOV = cam.fieldOfView;

            crosshair.SubAimAreaRelativeHeight.Clear();
            crosshair.SubAimAreaScreenPosition.Clear();

            for (int i = 0; i < m_AimAreaList.Count; i++)
            {
                AimArea aimArea = m_AimAreaList[i];
                if (aimArea.IsSon)
                {
                    //子区域
                    crosshair.SubAimAreaRelativeHeight.Add(new Vector2(aimArea.GetCoverAngle() / horFOV, aimArea.GetCoverAngle() / verFOV));
                    crosshair.SubAimAreaScreenPosition.Add(cam.WorldToScreenPoint(cam.transform.position + aimArea.GetCentralRay()));
                }
            }

            crosshair.RemainingRestoreDuration = Mathf.Clamp(m_TimeOfStartFire + m_RestoreDuration - Time.time, 0, float.MaxValue);
            GameFacade.Instance.SendNotification(NotificationName.PlayerWeaponCrosshairScale_ShotGun, crosshair);
        }
    }
    /// <summary>
    /// 通知子区域情况
    /// </summary>
    /// <param name="crosshair"></param>
     private void OnWeaponCrosshairSonArea(MsgPlayerWeaponCrosshair_ShotGun crosshair)
    {
        //子准星的列表
        if (m_Crosshair != null && m_Crosshair.Find("SubCrosshairs") != null)
        {
            RectTransform subCrosshairBox = m_Crosshair.Find("SubCrosshairs").GetComponent<RectTransform>();
            RectTransform subCrosshairTemplate = subCrosshairBox.GetChild(0).GetComponent<RectTransform>();

            m_subCrosshairPositions.Clear();
            m_SubCrosshairBeginTime = Time.time;
            m_SubCrosshairDuration = crosshair.RemainingRestoreDuration;

            int index = 0;
            for (int i = 0; i < crosshair.SubAimAreaRelativeHeight.Count; i++)
            {
                Vector2 size = crosshair.SubAimAreaRelativeHeight[i];
                Vector2 position = crosshair.SubAimAreaScreenPosition[i];

                RectTransform view = i < subCrosshairBox.childCount ? subCrosshairBox.GetChild(i).GetComponent<RectTransform>() : Object.Instantiate(subCrosshairTemplate, subCrosshairBox);
                Animator animator = view.GetComponent<Animator>();

                Vector2 positionPoint;
                if (RectTransformUtility.ScreenPointToLocalPointInRectangle(m_Root.parent.GetComponent<RectTransform>(), position, m_Camera, out positionPoint))
                    view.anchoredPosition = positionPoint - new Vector2(Screen.width / 2, Screen.height / 2);

                m_subCrosshairPositions.Add(positionPoint);

                Vector2 sizePoint;
                if (RectTransformUtility.ScreenPointToLocalPointInRectangle(m_Root.parent.GetComponent<RectTransform>(), position + (new Vector2(Screen.width * size.x, Screen.height * size.y)), m_Camera, out sizePoint))
                    view.sizeDelta = sizePoint - positionPoint;

                view.gameObject.SetActive(true);
                animator.enabled = false;

                index++;
            }

            for (int i = index; i < subCrosshairBox.childCount; i++)
            {
                subCrosshairBox.GetChild(i).gameObject.SetActive(false);
            }
        }

    }