/// <summary>
    /// 获取聚焦的目标和信息
    /// </summary>
    /// <returns></returns>
    public AlignTarget GetCurrentAlignTarget()
    {
        AlignTarget alignTargetTemp = new AlignTarget(alignCamera.GetTarget(), alignCamera.CurrentAngles,
                                                      alignCamera.CurrentDistance, alignCamera.angleRange, alignCamera.distanceRange);

        return(alignTargetTemp);
    }
    public AlignTarget GetAlignTarget()
    {
        Quaternion  quaDir      = Quaternion.LookRotation(-transform.forward, Vector3.up);
        AlignTarget alignTarget = new AlignTarget(titleTag, new Vector2(30, quaDir.eulerAngles.y), 5, new Range(5, 90), new Range(1, 40));

        return(alignTarget);
    }
    /// <summary>
    /// 设置默认聚焦参数
    /// </summary>
    public void SetDefaultAlign()
    {
        RoomFactory roomFactory = RoomFactory.Instance;

        if (roomFactory)
        {
            roomFactory = GameObject.FindObjectOfType <RoomFactory>();
            if (roomFactory == null)
            {
                return;
            }
        }
        FactoryTypeEnum factory = roomFactory.FactoryType;

        switch (factory)
        {
        case FactoryTypeEnum.SiHui:
            defaultAlign = new AlignTarget(mouseTranslate.areaSettings.center, new Vector2(40, 0),
                                           300, new Range(0, 90), new Range(1, 400));
            break;

        case FactoryTypeEnum.BaoXin:
            defaultAlign = new AlignTarget(mouseTranslate.areaSettings.center, new Vector2(40, 0),
                                           160, new Range(0, 90), new Range(1, 300));
            break;

        case FactoryTypeEnum.ZiBo:
            defaultAlign = new AlignTarget(mouseTranslate.areaSettings.center, new Vector2(40, 0),
                                           800, new Range(0, 90), new Range(1, 1000));
            break;
        }
    }
    /// <summary>
    /// 拉近对焦某一个人员
    /// </summary>
    /// <param name="controller"></param>
    /// <param name="afterFocus"></param>
    public void Focus(HistoryManController controller, Action afterFocus = null)
    {
        if (IsFocus)
        {
            ClearFollowUIState(currentFocusController);
            if (controller == currentFocusController)
            {
                RecoverBeforeFocusAlign();
                return;
            }
            else
            {
                currentFocusController.historyNameUI.SetCameraFollowToggleButtonActive(false);
                //ClearFollowUIState(currentFocusController);
                CameraSceneManager.Instance.SetTheThirdPersonCameraFalse();
            }
        }
        else
        {
            SetLinesActive(false);
        }
        SetFocusController(controller);
        AlignTarget alignTargetT = controller.GetAlignTarget();

        FocusPerson(alignTargetT, afterFocus);

        if (SceneAssetManager.Instance)
        {
            SceneAssetManager.Instance.subject = controller.transform;
        }

        LoadBuildingOfPerson(controller);//加载人物所在的建筑物

        OnFocusPersonChanged(controller.gameObject, true);
    }
    /// <summary>
    /// 获取相机聚焦物体的信息
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public AlignTarget GetTargetInfo(GameObject obj)
    {
        AlignTarget alignTargetTemp = new AlignTarget(obj.transform, angleFocus,
                                                      camDistance, angleRange, disRange);

        return(alignTargetTemp);
    }
 /// <summary>
 /// 聚焦人员
 /// </summary>
 private void FocusPerson(AlignTarget alignTargetT, Action afterFocus = null)
 {
     if (IsFocus == false)
     {
         beforeFocusAlign = CameraSceneManager.Instance.GetCurrentAlignTarget();
         //SetIsIsFocus(true);
         SetIsFocus(true);
         //SetExitFocusbtn(true);
     }
     SetFollowuiIsCheckCollider(IsFocus);
     IsClickUGUIorNGUI.Instance.SetIsCheck(false);//不关闭UI检测,会导致人员移动时,鼠标移动在UI上,场景出现异常
     CameraSceneManager.Instance.FocusTarget(alignTargetT, () =>
     {
         CameraSceneManager.Instance.alignCamera.SetisCameraCollider(true);
         currentFocusController.SetCameraFollowButtonEnable(true);
         if (MultHistoryPlayUINew.Instance.mode == HistoryMode.Normal)
         {
             SetLinesActive(true);
             RefleshDrawLine();
         }
         if (afterFocus != null)
         {
             afterFocus();
         }
     });
 }
 protected virtual void OnGUI()
 {
     if (CheckFocusEnter())
     {
         var ray     = targetCamera.ScreenPointToRay(Input.mousePosition);
         var hitInfo = new RaycastHit();
         if (Physics.Raycast(ray, out hitInfo, maxRayDistance, layerMask))
         {
             var alignMark = hitInfo.transform.GetComponent <AlignMarkTarget>();
             if (alignMark)
             {
                 if (IsFocus == false)
                 {
                     defaultAlign = new AlignTarget(alignCamera.GetTarget(), alignCamera.CurrentAngles,
                                                    alignCamera.CurrentDistance, alignCamera.angleRange, alignCamera.distanceRange);
                     IsFocus = true;
                 }
                 alignCamera.AlignVeiwToTarget(alignMark.alignTarget);
             }
         }
     }
     else if (IsFocus && CheckFocusExit())
     {
         alignCamera.AlignVeiwToTarget(defaultAlign);
         IsFocus = false;
     }
 }
    /// <summary>
    /// 获取相机聚焦物体的信息
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public AlignTarget GetTargetInfo(GameObject obj)
    {
        Transform center = obj.transform;

        if (NodeName == "主厂房")
        {
            Transform t = transform.Find("主厂房中心");//这个中心是为了调整摄像头对焦,以至于可以看到一层
            if (t == null)
            {
                t = new GameObject("主厂房中心").transform;
                t.transform.position = obj.transform.position;
                //Vector3 sizeT = obj.GetSize();
                t.transform.position = new Vector3(t.transform.position.x, t.transform.position.y - 7, t.transform.position.z);
                t.SetParent(obj.transform);
            }
            center = t;
        }

        if (center == null)
        {
            center = obj.transform;
        }
        AlignTarget alignTargetTemp = new AlignTarget(center, angleFocus,
                                                      camDistance, angleRange, disRange);

        return(alignTargetTemp);
    }
Exemplo n.º 9
0
    /// <summary>
    /// 获取相机聚焦物体的信息
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    protected virtual AlignTarget GetTargetInfo(GameObject obj)
    {
        angleFocus = new Vector2(15, transform.eulerAngles.y);
        AlignTarget alignTargetTemp = new AlignTarget(obj.transform, angleFocus,
                                                      camDistance, angleRange, disRange);

        return(alignTargetTemp);
    }
 /// <summary>
 /// 更换当前聚焦角度和距离
 /// </summary>
 /// <param name="target"></param>
 /// <param name="onFocusComplete"></param>
 /// <param name="onBreakAction"></param>
 public void ChangeFocusAngle(AlignTarget target, Action onFocusComplete = null, Action onBreakAction = null)
 {
     OnAlignEndAction = onFocusComplete;
     if (OnBreakAction != null)
     {
         OnBreakAction();
     }
     OnBreakAction = onBreakAction;
     alignCamera.AlignVeiwToTarget(target);
 }
 /// <summary>
 /// 记录初始相机参数
 /// </summary>
 private void RecordDefaultAlign()
 {
     //defaultAlign = new AlignTarget(alignCamera.target, new Vector2(40,0),
     //                        230, new Range(5,90), new Range(1,250));
     defaultAlign = new AlignTarget(mouseTranslate.areaSettings.center, new Vector2(40, 0),
                                    270, new Range(0, 90), new Range(1, 300));
     SetDefaultAlign();
     defaultTranslatePro = new MouseTranslatePro();
     defaultTranslatePro.areaSettings  = mouseTranslate.areaSettings;
     defaultTranslatePro.mouseSettings = mouseTranslate.mouseSettings;
     defaultTranslatePro.targetCamera  = mouseTranslate.targetCamera;
 }
 /// <summary>
 /// 聚焦到目标物体
 /// </summary>
 /// <param name="targetObj"></param>
 public void FocusTarget(AlignTarget targetObj, Action onFocusComplete = null, Action onBreakAction = null)
 {
     //if (targetObj==null) return;
     OnAlignEndAction = onFocusComplete;
     if (OnBreakAction != null)
     {
         OnBreakAction();
     }
     OnBreakAction       = onBreakAction;
     IsMouseTranslateSet = false;
     alignCamera.AlignVeiwToTarget(targetObj);
 }
    /// <summary>
    /// 获取当前默认参数
    /// </summary>
    /// <returns></returns>
    public AlignTarget GetCurrentAlign()
    {
        AlignTarget target = new AlignTarget();

        //target.center = alignCamera.target;
        target.SetCenter(alignCamera.GetTargetPos());
        target.angleRange    = alignCamera.angleRange;
        target.distanceRange = alignCamera.distanceRange;
        target.distance      = alignCamera.CurrentDistance;
        target.angles        = alignCamera.CurrentAngles;
        return(target);
    }
 /// <summary>
 /// 聚焦设备,可以拖拽
 /// </summary>
 /// <param name="targetObj"></param>
 /// <param name="size"></param>
 /// <param name="action"></param>
 public void FocusTargetWithTranslate(AlignTarget targetObj, Action action = null, Action onBreakAction = null)
 {
     OnAlignEndAction = action;
     if (OnBreakAction != null)
     {
         OnBreakAction();
     }
     OnBreakAction       = onBreakAction;
     IsMouseTranslateSet = true;
     mouseTranslate.ResetTranslateOffset();
     alignCamera.AlignVeiwToTarget(targetObj);
 }
    private void FocusCamera(GameObject room, Action onCameraAlignEnd = null)
    {
        AlignTarget        alignTargetTemp = GetFloorTargetInfo(room);
        CameraSceneManager cameraT         = CameraSceneManager.Instance;

        cameraT.FocusTargetWithTranslate(alignTargetTemp, AreaSize, onCameraAlignEnd, () =>
        {
            if (RoomFactory.Instance)
            {
                RoomFactory.Instance.SetDepFoucusingState(false);
            }
        });
    }
Exemplo n.º 16
0
    /// <summary>
    /// 聚焦区域
    /// </summary>
    public override void FocusOn(Action onFocusComplete = null)
    {
        IsFocus = true;
        AlignTarget        alignTargetTemp = GetTargetInfo(gameObject);
        CameraSceneManager cameraT         = CameraSceneManager.Instance;

        cameraT.FocusTargetWithTranslate(alignTargetTemp, AreaSize, onFocusComplete, () =>
        {
            if (RoomFactory.Instance)
            {
                RoomFactory.Instance.SetDepFoucusingState(false);
            }
        });
    }
    /// <summary>
    /// 获取楼层对焦信息
    /// </summary>
    /// <param name="room"></param>
    /// <returns></returns>
    private AlignTarget GetFloorTargetInfo(GameObject room)
    {
        FloorController floor = room.GetComponent <FloorController>();

        if (floor != null)
        {
            return(floor.GetTargetInfo(room));
        }
        else
        {
            AlignTarget alignTargetTemp = new AlignTarget(room.transform, new Vector2(50, 0),
                                                          30, angleRange, new Range(2, 40));
            return(alignTargetTemp);
        }
    }
 /// <summary>
 /// 漫游时,更改摄像机参数
 /// </summary>
 /// <param name="isOn"></param>
 private void ChangeDefaultAlign(bool isOn)
 {
     if (RoomFactory.Instance && RoomFactory.Instance.FactoryType == FactoryTypeEnum.BaoXin)
     {
         if (isOn)
         {
             AlignTarget defaultAlign = CameraSceneManager.Instance.GetDefaultAlign();
             defaultAlign.distance = 100;
             CameraSceneManager.Instance.SetDefaultAlign(defaultAlign);
         }
         else
         {
             CameraSceneManager.Instance.SetDefaultAlign();
         }
     }
 }
Exemplo n.º 19
0
    /// <summary>
    /// 获取相机聚焦物体的信息
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    protected override AlignTarget GetTargetInfo(GameObject obj)
    {
        if (radius == 0)
        {
            var bounds = ColliderHelper.CaculateBounds(gameObject.transform, false);//不用碰撞体,计算包围盒就行了
            radius = ColliderHelper.GetRadius(bounds.size);
        }

        camDistance = radius * 1.5f;
        disRange    = new Range(radius * 0.75f, radius * 3f);
        angleFocus  = new Vector2(60, 60);

        AlignTarget alignTargetTemp = new AlignTarget(obj.transform, angleFocus,
                                                      camDistance, angleRange, disRange);

        return(alignTargetTemp);
    }
 void Awake()
 {
     //Reset align target.
     RoomDic = new Dictionary <int, GameObject>();
     depType = DepType.Building;
     if (NodeObject == null)
     {
         NodeObject = this.gameObject;
     }
     InitBoxCollider();
     BuildingCollider = transform.GetComponent <BoxCollider>();
     if (BuildingCollider)
     {
         BuildingCollider.isTrigger = true;//为了漫游能够进去
     }
     alignTarget = new AlignTarget(transform, new Vector2(30, 0), 1, new Range(10, 90), new Range(0.5f, 1.5f));
 }
    private float minDistanceOrg = -50f; //正交最远距离
    /// <summary>
    /// 更换当前聚焦角度和距离
    /// </summary>
    /// <param name="angle">角度</param>
    /// <param name="distance">距离</param>
    /// <param name="onFocusComplete">聚焦完成回调</param>
    /// <param name="onBreakAction">被其他聚焦中断的回调</param>
    public void ChangeFocusAngle(Vector2 angle, Action onFocusComplete = null, Action onBreakAction = null)
    {
        OnAlignEndAction = onFocusComplete;
        if (OnBreakAction != null)
        {
            OnBreakAction();
        }
        OnBreakAction = onBreakAction;
        AlignTarget target = new AlignTarget();

        //target.center = alignCamera.target;
        target.SetCenter(alignCamera.GetTargetPos());
        target.angleRange = new Range(0, 90);

        target.distanceRange = alignCamera.distanceRange;
        target.distance      = alignCamera.CurrentDistance;
        target.angles        = angle;
        alignCamera.AlignVeiwToTarget(target);
    }
Exemplo n.º 22
0
    /// <summary>
    /// 聚焦设备
    /// </summary>
    public void FocusOn()
    {
        bool sameArea = IsSameArea();

        if (CurrentFocusDev != null)
        {
            CurrentFocusDev.FocusOff(false);
        }
        IsFocus = true;
        CameraSceneManager manager = CameraSceneManager.Instance;

        if (manager)
        {
            if (sameArea)
            {
                AlignTarget target = GetTargetInfo(gameObject);
                manager.FocusTarget(target, () =>
                {
                    ChangeBackButtonState(true);
                });
                HighlightOn();
            }
            else
            {
                RoomFactory.Instance.FocusNode(ParentDepNode, () =>
                {
                    AlignTarget target = GetTargetInfo(gameObject);
                    manager.FocusTarget(target, () =>
                    {
                        ChangeBackButtonState(true);
                    });
                    HighlightOn();
                });
            }
            CurrentFocusDev = this;
        }
    }
 /// <summary>
 /// 聚焦设备,可以拖拽
 /// </summary>
 /// <param name="targetObj"></param>
 /// <param name="size"></param>
 /// <param name="action"></param>
 public void FocusTargetWithTranslate(AlignTarget targetObj, Vector2 size, Action action = null, Action onBreakAction = null)
 {
     OnAlignEndAction = action;
     if (OnBreakAction != null)
     {
         OnBreakAction();
     }
     OnBreakAction       = onBreakAction;
     IsMouseTranslateSet = true;
     AreaSize            = size;
     mouseTranslate.ResetTranslateOffset();
     //mouseTranslate.areaSettings.length = size.x;
     //mouseTranslate.areaSettings.width = size.y;
     //Transform targetCenter = targetObj.center;
     //targetObj.center = mouseTranslate.gameObject.transform;
     //mouseTranslate.areaSettings.center = targetCenter;
     //mouseTranslate.SetTranslatePosition(targetCenter.position);
     //if(Mathf.Abs(targetObj.angles.x-alignCamera.CurrentAngles.x)<5f)
     //{
     //    Vector2 angle = alignCamera.CurrentAngles - new Vector2(0,30);
     //    alignCamera.SetCurrentAngle(angle);
     //}
     alignCamera.AlignVeiwToTarget(targetObj);
 }
 /// <summary>
 /// 聚焦建筑
 /// </summary>
 public override void FocusOn(Action onFocusComplete = null)
 {
     IsFocus = true;
     if (NodeObject == null)
     {
         if (onFocusComplete != null)
         {
             onFocusComplete();
         }
         Debug.Log("DepObject is null...");
         return;
     }
     else
     {
         CameraSceneManager camera = CameraSceneManager.Instance;
         if (camera)
         {
             AlignTarget alignTargetTemp = GetTargetInfo(NodeObject);
             camera.FocusTargetWithTranslate(alignTargetTemp, AreaSize, onFocusComplete, () =>
             {
                 if (RoomFactory.Instance)
                 {
                     RoomFactory.Instance.SetDepFoucusingState(false);
                 }
             });
         }
         else
         {
             if (onFocusComplete != null)
             {
                 onFocusComplete();
             }
             Log.Alarm("CameraSceneManager.Instance==null");
         }
     }
 }
Exemplo n.º 25
0
 protected virtual void Reset()
 {
     //Reset align target.
     alignTarget = new AlignTarget(transform, new Vector2(30, 0), 5, new Range(-90, 90), new Range(1, 10));
 }
 public void SetDefaultAlign(AlignTarget alignTragetTemp)
 {
     defaultAlign = alignTragetTemp;
 }