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;
        }
    }
Beispiel #3
0
    // 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;
        }
    }