// Update is called once per frame
    //void Update()
    //{

    //}

    //private void OnCollisionEnter(Collision collision)
    //{
    //    if(collision.gameObject.tag == "Doorway")
    //    {
    //        Physics.IgnoreCollision(collision.collider, this.collider);
    //    }
    //}

    void LateUpdate()
    {
        Vector3 playerOffset = follow.position + addOffset;

        //Behind or Target Camera state
        //if (Input.GetAxis("ResetCam") > 0.01f)
        //{
        //    camPhase = CameraPhase.Target;
        //}
        //else
        //{
        //    camPhase = CameraPhase.Behind;
        //}

        if (Input.GetAxis("ResetCam") > 0.01f)
        {
            camPhase = CameraPhase.Around;
        }
        else
        {
            camPhase = CameraPhase.Target;
        }


        switch (camPhase)
        {
        case CameraPhase.Around:
            camLook   = playerOffset - this.transform.position;
            camLook.y = 0;
            camLook.Normalize();     //Provides direction for our camera
            Debug.DrawRay(this.transform.position, camLook, Color.green);

            //New set cam position
            targetPos = playerOffset + follow.up * offsetY - camLook * offsetX;
            Debug.DrawRay(follow.position, Vector3.up * offsetY, Color.red);
            Debug.DrawRay(follow.position, -1.0f * follow.forward * offsetX, Color.blue);
            Debug.DrawLine(follow.position, targetPos, Color.green);
            break;

        case CameraPhase.Target:
            camLook = follow.forward;
            break;
        }
        targetPos = playerOffset + follow.up * offsetY - camLook * offsetX;

        //Detects camera collision w/wall and compensates instead of clipping
        DodgeObjects(playerOffset, ref targetPos);
        //Updates cam pos to where we want it
        smoothPosition(this.transform.position, targetPos);
        //transform.position = Vector3.Lerp(transform.position, targetPos, Time.deltaTime * camSmoothing);
        //targetPos = playerOffset + follow.up * offsetY - camLook * offsetX;

        transform.LookAt(follow.position + new Vector3(0, 0.5f, 0));
    }
Beispiel #2
0
    // Moves relative to the CurrentGameObject
    public void MoveCameraRelative(Vector3 targetOffset, Quaternion targetRotation)
    {
        IsRelativeToTargetGO = true;

        InitialPosition = this.transform.position;
        InitialRotation = this.transform.rotation;

        TargetOffset   = targetOffset;
        TargetRotation = targetRotation;

        CurrentPhase = CameraPhase.InTransition;
        Timer.StartTimer(Smoothness);
    }
Beispiel #3
0
    private void Start()
    {
        IsRelativeToTargetGO    = true;
        TargetGO                = GameObject.Find("Sield");
        TargetOffset            = DefaultOffset;
        InitialPosition         = TargetPosition = TargetOffset + TargetGO.transform.position;
        InitialRotation         = TargetRotation = DefaultRotation;
        this.transform.position = InitialPosition;
        this.transform.rotation = InitialRotation;
        Smoothness              = DefaultSmoothness;

        Timer        = GetComponent <Timer>();
        CurrentPhase = CameraPhase.NoTransition;
    }
Beispiel #4
0
    private void InTransitionUpdate()
    {
        if (Timer.IsInProgress())
        {
            TargetPosition = IsRelativeToTargetGO && TargetGO != null ?
                             TargetGO.transform.position + TargetOffset :
                             TargetPosition;

            this.transform.position = Vector3.Lerp(InitialPosition,
                                                   TargetPosition,
                                                   Timer.GetProgress() / Smoothness);
            this.transform.rotation = Quaternion.Lerp(InitialRotation,
                                                      TargetRotation,
                                                      Timer.GetProgress() / Smoothness);
        }
        else
        {
            Timer.ResetTimer();

            CurrentPhase = CameraPhase.NoTransition;

            Smoothness = DefaultSmoothness; // revert transitional smoothness to the default
        }
    }