public bool MostrarFixa(float velocidadeTempoDeFoco, float distancia = 6, float altura = -1, bool tempo = false, Vector3 posInicialDMovimento = default(Vector3), bool focoDoTransform = false, Vector3 deslFocoCamera = default(Vector3) ) { //Debug.Log(foco); if (altura < 0) { altura = alturaDoPersonagem; } float lerp = 0; if (!tempo) { lerp = velocidadeTempoDeFoco * Time.deltaTime; } else { contadorDeTempo += Time.deltaTime; lerp = contadorDeTempo / velocidadeTempoDeFoco; } if (posInicialDMovimento == default(Vector3)) { posInicialDMovimento = transform.position; } Vector3 posAlvo = foco.position + foco.forward * distancia + Vector3.up * altura; Vector3 dirAlvo = (focoDoTransform)?-foco.forward:foco.position - (transform.position + deslFocoCamera); dirAlvo.Normalize(); if (transform) { transform.position = Vector3.Lerp(posInicialDMovimento, posAlvo, lerp); transform.rotation = Quaternion.LookRotation( Vector3.Lerp(transform.forward, dirAlvo, lerp) ); if (contraParedes) { CameraDeLuta.contraParedes(transform, foco, altura, true); } if (!tempo && Vector3.Distance(transform.position, posAlvo) < 0.5f && Vector3.Distance(transform.forward, dirAlvo) < 0.5f) { transform.position = posAlvo; transform.rotation = Quaternion.LookRotation(foco.position - transform.position); return(true); } else if (tempo && Vector3.Distance(transform.position, posAlvo) < 0.1f && Vector3.Distance(transform.forward, dirAlvo) < 0.1f) { return(true); } } else { Debug.LogError("A camera não foi setada corretamente"); } return(false); }
public void MostrandoUmCriature() { baseDeMovimento.RotateAround(foco.position, Vector3.up, 15 * Time.deltaTime); transform.RotateAround(foco.position, Vector3.up, 15 * Time.deltaTime); baseDeMovimento.position = Vector3.Lerp(baseDeMovimento.position, foco.position + 8 * (Vector3.ProjectOnPlane(baseDeMovimento.position - foco.position, Vector3.up).normalized) + (5 + alturaDoPersonagem) * Vector3.up, 2 * Time.deltaTime); baseDeMovimento.LookAt(foco); if (CameraDeLuta.contraParedes(baseDeMovimento, foco, alturaDoPersonagem, true)) { CameraDeLuta.contraParedes(transform, foco, alturaDoPersonagem, true); } else { transform.position = baseDeMovimento.position; transform.rotation = baseDeMovimento.rotation; } }
// Update is called once per frame public void Update() { Vector3 dirCamera = Vector3.forward; if (dirDeObj) { dirCamera = -this.alvo.forward; } dirAlvo = alvo.position - distanciaHorizontal * dirCamera + altura * Vector3.up; velDeLerp = velocidadeDeCamera * Mathf.Max(1, Vector3.Distance(dirAlvo, transform.position) / Mathf.Sqrt(Mathf.Pow(altura, 2) + Mathf.Pow(distanciaHorizontal, 2) )); transform.position = Vector3.Lerp(transform.position, dirAlvo , velDeLerp * Time.deltaTime); if (contraParedes) { CameraDeLuta.contraParedes(transform, alvo, 1); } }
public void AplicaCamera(float altura) { if (caracteristicas.alvo && caracteristicas.minhaCamera) { if (Input.GetButtonDown("focarCamera")) { EstadoAtual = EstadoDeCamera.focando; } if (estadoAtual == EstadoDeCamera.controlando) { CameraControlavel(); } else if (estadoAtual == EstadoDeCamera.focando) { FocarCamera(); } Quaternion rotation = Quaternion.Euler(y, x, 0); Vector3 position = rotation * (new Vector3(0.0f, 0.0f, -caracteristicas.distancia)) + caracteristicas.alvo.position + (altura + caracteristicas.AlturaDoPersonagem) * Vector3.up; caracteristicas.minhaCamera.rotation = rotation; caracteristicas.minhaCamera.position = position + Vector3.up; SetarTransformsDeRetorno(); CameraDeLuta.contraParedes(caracteristicas.minhaCamera, caracteristicas.alvo, altura + caracteristicas.AlturaDoPersonagem); } else { caracteristicas.alvo = GameController.g.Manager.transform; } }