// 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)); }
// 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); }
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; }
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 } }