예제 #1
0
    private void OnScreenRaycast()
    {
        SpacecraftEntity target;
        Vector3          targetPoint;
        Collider         targetCollider;

        if (RaycastTarget(VisibilityRange, out target, out targetPoint, out targetCollider))
        {
        }
        else
        {
            // TODO 技能, 自动瞄准
            //          SpacecraftEntity currHero = null;
            //          var currDistance = float.MaxValue;
            //          var lockDistance = autoLockDistance * autoLockDistanceMulti;
            //
            //          var centerPoint = new Vector2(Screen.width / 2, Screen.height / 2);
            //          foreach (var hero in playerEntityList)
            //          {
            //              if (hero == mainHero) continue;
            //              var heroPoint = (Vector2)Camera.main.WorldToScreenPoint(hero.Motion<BaseMotion>().horizonAxis.position);
            //              var heroDistance = Vector2.Distance(heroPoint, centerPoint);
            //              if (heroDistance < lockDistance && heroDistance < currDistance)
            //              {
            //                  currDistance = heroDistance;
            //                  currHero = hero;
            //              }
            //          }
            //          foreach (var hero in npcEntityList)
            //          {
            //              if (hero == mainHero) continue;
            //              if (hero.npcTemplateVO.MotionType == 0) continue;
            //              if ((KHeroType)hero.subType == KHeroType.htMonsterChest) continue;
            //              var heroPoint = (Vector2)Camera.main.WorldToScreenPoint(hero.Motion<BaseMotion>().horizonAxis.position);
            //              var heroDistance = Vector2.Distance(heroPoint, centerPoint);
            //              if (heroDistance < lockDistance && heroDistance < currDistance)
            //              {
            //                  currDistance = heroDistance;
            //                  currHero = hero;
            //              }
            //          }
            //
            //          mainHero.ChangeTarget(currHero);
        }

        // TODO 技能, 自动瞄准
        //mainHero.Motion<BaseMotion>().CameraRotationSensitivityMulti = mainHero.GetTarget() != null ? mainHero.autoLockDrag : 1.0f;


        if (m_PickTargetProperty.GetTarget() != target || m_PickTargetProperty.GetTargetCollider() != targetCollider)
        {
            m_PickTargetProperty.SetTarget(target, targetCollider);
            ChangeTargetEvent eventInfo = new ChangeTargetEvent();
            eventInfo.newTarget = target;
            SendEvent(ComponentEventName.ChangeTarget, eventInfo);
        }
    }
예제 #2
0
        public void Reset()
        {
            Target     = null;
            SnapOnInit = false;

            FollowSpeed = new Vector2(9.6f, 9.6f);

            OnChangeTarget = new ChangeTargetEvent();
        }
예제 #3
0
        public void Awake()
        {
            State        = CameraControllerState.Follow;
            BasePosition = transform.position;
            PanOffset    = Vector2.zero;
            FollowTarget = true;
            WaitTimer    = 0f;

            OnChangeTarget = OnChangeTarget ?? new ChangeTargetEvent();
            Camera         = GetComponent <Camera>();
        }
예제 #4
0
 public override void OnTargetChanged(ChangeTargetEvent eventInfo)
 {
     // 导弹武器使用特殊的目标选择方式
 }
예제 #5
0
 /// <summary>
 /// 通过屏幕中心打出射线选择的目标改变了
 /// </summary>
 /// <param name="eventInfo"></param>
 public virtual void OnTargetChanged(ChangeTargetEvent eventInfo)
 {
     // 锁定多目标, 同时让他们描红的逻辑, 还需要仔细考虑. 这里暂时先注释. 选择目标把它描红的逻辑让HUD执行
     //NotifyHUDTargetSelected(eventInfo.newTarget);
 }