Ejemplo n.º 1
0
 //出現在任何一台攝影影機的瞬間,包含編輯畫面
 void OnBecameVisible()
 {
     if (!OnCamera.InCamera(LookCamera, gameObject, VisionDistance))
     {
         return;
     }
     this.LookState = LookStateEnum.StartLook;
     OnChangeToStartLook();
 }
Ejemplo n.º 2
0
    void CheckOnLook()
    {
        Renderer renderer = gameObject.GetComponent <Renderer>();

        if (renderer == null)
        {
            return;
        }

        if (!renderer.isVisible)//出現在任何一台攝影影機中,包含編輯畫面有出現也會判定為true
        {
            return;
        }

        //DebugSystem.AddLog(DebugSystem.DebugInfo.GetNewDebugInfo(
        //DebugSystem.DebugInfo.DebugLogTypeEnum.Info,
        //SystemName,
        //this.gameObject.name + "被觀看"));


        if (OnCamera.InCamera(LookCamera, gameObject, VisionDistance))
        {
            if (this.LookState == LookStateEnum.Invisible)
            {
                this.LookState = LookStateEnum.StartLook;
                OnChangeToStartLook();
            }
        }
        else
        {
            if (this.LookState == LookStateEnum.OnLook)
            {
                this.LookState = LookStateEnum.ExitLook;
                OnChangeToExitLook();
            }
        }
    }
Ejemplo n.º 3
0
 //離開在任何一台攝影影機的瞬間,包含編輯畫面
 void OnBecameInvisible()
 {
     this.LookState = LookStateEnum.ExitLook;
     OnChangeToExitLook();
 }
Ejemplo n.º 4
0
    void Update()
    {
        #region 切換狀態
        ////先轉換前一次的瞬間狀態唯持續狀態
        if (LookState == LookStateEnum.ExitForceLook)
        {
            LookState = LookStateEnum.OnLook;
            OnChangeToOnLook();
        }
        else if (LookState == LookStateEnum.ExitLook)
        {
            LookState = LookStateEnum.Invisible;
            OnChangeToInvisible();
        }
        else if (LookState == LookStateEnum.StartLook)
        {
            LookState = LookStateEnum.OnLook;
            OnChangeToOnLook();
        }
        #endregion 切換狀態

        CheckOnLook();

        CheckGazedAt();

        UpdatOnForceLookBehavior();

        #region 正被注視的狀態
        if (LookState == LookStateEnum.OnForceLook)
        {
            switch (InteractiveMode)
            {
            case InteractiveModeEnum.ControlMe:
                //移動Cardboard到自己的位置
                if (CanControl && Portal.Instance != null &&
                    (AutoChangeControler || (Input.GetKey(KeyCode.Joystick1Button7) && Input.GetKeyDown(KeyCode.Joystick1Button0))))
                {
                    Portal.Instance.DoPortal(CardBoard, this.gameObject.transform.position);
                    if (StereoController3D != null)
                    {
                        StereoController3D.matchByZoom = 0;
                    }

                    LookState = LookStateEnum.Invisible;
                    OnChangeToInvisible();
                    HaveGameobjectOnForceLook = null;
                }
                break;

            case InteractiveModeEnum.ControlOther:
                //Cardboard移動到指定的位置
                if (PortalTo != Vector3.zero)
                {
                    if (CanControl && Portal.Instance != null &&
                        (AutoChangeControler || (Input.GetKey(KeyCode.Joystick1Button7) && Input.GetKeyDown(KeyCode.Joystick1Button0))))
                    {
                        Portal.Instance.DoPortal(CardBoard, PortalTo);
                        if (StereoController3D != null)
                        {
                            StereoController3D.matchByZoom = 0;
                        }

                        LookState = LookStateEnum.Invisible;
                        OnChangeToInvisible();
                        HaveGameobjectOnForceLook = null;
                    }
                }
                break;

            case InteractiveModeEnum.ProtagonistGoNextPoint:
                // 主角移動到下一個指定位置
                if (PlayerControl.Instance != null)
                {
                    PlayerControl.Instance.GoNextPoint();
                }
                break;

            case InteractiveModeEnum.None:
            default:
                break;
            }
        }
        #endregion 正被注視的狀態
    }
Ejemplo n.º 5
0
    void CheckGazedAt()
    {
        if (LookState == LookStateEnum.Invisible)
        {
            return;
        }
        if (LookState == LookStateEnum.ExitLook)
        {
            LookState = LookStateEnum.Invisible;
            OnChangeToExitLook();
            return;
        }

        #region 取得看到的物體
        if (LookCamera == null)
        {
            return;
        }

        Ray        ray = LookCamera.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));
        RaycastHit hit;
        if (!Physics.Raycast(ray, out hit, VisionDistance))
        {
            if (OnForceLook)
            {
                this.OnForceLook        = false;
                this.ForceLookCheckDone = false;

                if (HaveGameobjectOnForceLook == gameObject)
                {
                    HaveGameobjectOnForceLook = null;
                }


                this.LookState = LookStateEnum.ExitForceLook;
                OnChangeToExitForceLook();
            }
            return;
        }
        #endregion 取得看到的物體

        //檢查看到的物件是否是自己
        bool lookMe = hit.transform == transform;

        if (lookMe && OnForceLook)
        {
            LookState = LookStateEnum.OnForceLook;
            OnChangeToOnForceLook();
            return;
        }

        if (lookMe && !OnForceLook)
        {
            this.OnForceLook        = true;
            this.CheckDoneTime      = Time.time + this.WatingTime;
            this.ForceLookCheckDone = false;

            HaveGameobjectOnForceLook = gameObject;

            this.LookState = LookStateEnum.StartForceLook;
            OnChangeToStartForceLook();
        }
        else if (!lookMe && OnForceLook)
        {
            this.LookState   = LookStateEnum.ExitForceLook;
            this.OnForceLook = false;
            if (HaveGameobjectOnForceLook == gameObject)
            {
                HaveGameobjectOnForceLook = null;
            }
            OnChangeToExitForceLook();

            HaveGameobjectOnForceLook = null;
        }
        else
        {
            if (this.OnForceLook)
            {
                this.OnForceLook = false;
            }
            if (this.ForceLookCheckDone)
            {
                this.ForceLookCheckDone = false;
            }
            if (this.LookState == LookStateEnum.OnForceLook)
            {
                this.LookState = LookStateEnum.ExitForceLook;
            }
            if (HaveGameobjectOnForceLook == gameObject)
            {
                HaveGameobjectOnForceLook = null;
            }
        }
    }
Ejemplo n.º 6
0
 //離開在任何一台攝影影機的瞬間,包含編輯畫面
 void OnBecameInvisible()
 {
     this.LookState = LookStateEnum.ExitLook;
     OnChangeToExitLook();
 }
Ejemplo n.º 7
0
 //出現在任何一台攝影影機的瞬間,包含編輯畫面
 void OnBecameVisible()
 {
     if (!OnCamera.InCamera(LookCamera, gameObject, VisionDistance))
         return;
     this.LookState = LookStateEnum.StartLook;
     OnChangeToStartLook();
 }
Ejemplo n.º 8
0
    void CheckOnLook()
    {
        Renderer renderer = gameObject.GetComponent<Renderer>();
        if (renderer == null)
            return;

        if (!renderer.isVisible)//出現在任何一台攝影影機中,包含編輯畫面有出現也會判定為true
            return;

        //DebugSystem.AddLog(DebugSystem.DebugInfo.GetNewDebugInfo(
        //DebugSystem.DebugInfo.DebugLogTypeEnum.Info,
        //SystemName,
        //this.gameObject.name + "被觀看"));


        if (OnCamera.InCamera(LookCamera, gameObject, VisionDistance))
        {
            if (this.LookState == LookStateEnum.Invisible)
            {
                this.LookState = LookStateEnum.StartLook;
                OnChangeToStartLook();
            }
        }
        else
        {
            if (this.LookState == LookStateEnum.OnLook)
            {
                this.LookState = LookStateEnum.ExitLook;
                OnChangeToExitLook();
            }
        }

    }
Ejemplo n.º 9
0
    void CheckGazedAt()
    {
        if (LookState == LookStateEnum.Invisible)
            return;
        if (LookState == LookStateEnum.ExitLook)
        {
            LookState = LookStateEnum.Invisible;
            OnChangeToExitLook();
            return;
        }

        #region 取得看到的物體
        if (LookCamera == null)
            return;

        Ray ray = LookCamera.ScreenPointToRay(new Vector3(Screen.width/2, Screen.height/2, 0));
        RaycastHit hit;
        if (!Physics.Raycast(ray, out hit, VisionDistance))
        {
            if (OnForceLook)
            {
                this.OnForceLook = false;
                this.ForceLookCheckDone = false;

                if (HaveGameobjectOnForceLook == gameObject)
                    HaveGameobjectOnForceLook = null;


                this.LookState = LookStateEnum.ExitForceLook;
                OnChangeToExitForceLook();
            }
            return;
        }
        #endregion 取得看到的物體

        //檢查看到的物件是否是自己
        bool lookMe = hit.transform == transform;

        if (lookMe && OnForceLook)
        {
            LookState = LookStateEnum.OnForceLook;
            OnChangeToOnForceLook();
            return;
        }

        if (lookMe && !OnForceLook)
        {
            this.OnForceLook = true;
            this.CheckDoneTime = Time.time + this.WatingTime;
            this.ForceLookCheckDone = false;

            HaveGameobjectOnForceLook = gameObject;

            this.LookState = LookStateEnum.StartForceLook;
            OnChangeToStartForceLook();
        }
        else if(!lookMe && OnForceLook)
        {
            this.LookState = LookStateEnum.ExitForceLook;
            this.OnForceLook = false;
            if (HaveGameobjectOnForceLook == gameObject)
                HaveGameobjectOnForceLook = null;
            OnChangeToExitForceLook();

            HaveGameobjectOnForceLook = null;
        }
        else
        {
            if(this.OnForceLook)
                this.OnForceLook = false;
            if(this.ForceLookCheckDone)
                this.ForceLookCheckDone = false;
            if(this.LookState == LookStateEnum.OnForceLook)
                this.LookState = LookStateEnum.ExitForceLook;
            if(HaveGameobjectOnForceLook==gameObject)
                HaveGameobjectOnForceLook = null;
        }

    }
Ejemplo n.º 10
0
    void Update()
    {
        #region 切換狀態
        ////先轉換前一次的瞬間狀態唯持續狀態
        if (LookState == LookStateEnum.ExitForceLook)
        {
            LookState = LookStateEnum.OnLook;
            OnChangeToOnLook();
        }
        else if (LookState == LookStateEnum.ExitLook)
        {
            LookState = LookStateEnum.Invisible;
            OnChangeToInvisible();
        }
        else if (LookState == LookStateEnum.StartLook)
        {
            LookState = LookStateEnum.OnLook;
            OnChangeToOnLook();
        }
        #endregion 切換狀態

        CheckOnLook();

        CheckGazedAt();

        UpdatOnForceLookBehavior();

        #region 正被注視的狀態
        if (LookState == LookStateEnum.OnForceLook)
        {

            switch (InteractiveMode)
            {
                case InteractiveModeEnum.ControlMe:
                    //移動Cardboard到自己的位置
                    if (CanControl && Portal.Instance != null
                    && (AutoChangeControler || (Input.GetKey(KeyCode.Joystick1Button7) && Input.GetKeyDown(KeyCode.Joystick1Button0))))
                    {
                        Portal.Instance.DoPortal(CardBoard, this.gameObject.transform.position);
                        if (StereoController3D != null)
                            StereoController3D.matchByZoom = 0;

                        LookState = LookStateEnum.Invisible;
                        OnChangeToInvisible();
                        HaveGameobjectOnForceLook = null;
                    }
                    break;

                case InteractiveModeEnum.ControlOther:
                    //Cardboard移動到指定的位置
                    if (PortalTo != Vector3.zero)
                    {
                        if (CanControl && Portal.Instance != null
                            && (AutoChangeControler || (Input.GetKey(KeyCode.Joystick1Button7) && Input.GetKeyDown(KeyCode.Joystick1Button0))))
                        {
                            Portal.Instance.DoPortal(CardBoard, PortalTo);
                            if (StereoController3D != null)
                                StereoController3D.matchByZoom = 0;

                            LookState = LookStateEnum.Invisible;
                            OnChangeToInvisible();
                            HaveGameobjectOnForceLook = null;
                        }
                    }
                    break;

                case InteractiveModeEnum.ProtagonistGoNextPoint:
                    // 主角移動到下一個指定位置
                    if (PlayerControl.Instance != null)
                        PlayerControl.Instance.GoNextPoint();
                    break;

                case InteractiveModeEnum.None:
                default:
                    break;
            }
            
        }
        #endregion 正被注視的狀態
    }