Beispiel #1
0
    void UpdateAutomaticCamera(Transform obj)                                                                   //Este método actualiza la posición de mi cámara respecto del objeto a seguir cuando la cámara no es libre
    {
        //Local vars
        Vector3 objToCamVec = transform.position - obj.position;
        float   actualAngle = StaticFunctions.AngleInPlane(transform.forward, obj.forward, Vector3.up);         //Variable que guarda el ángulo que forman los dos vectores anteriores

        if (actualAngle <= maxRotationAngle)
        {                                                                                                        //Si mi ángulo no supera el máximo a partir del cual decido que la cámara no gire:
            LookingAtCamera = false;
            if (objToCamVec.magnitude > targetCamDistance)                                                       //Si el módulo de este vector es mayor que la distancia máxima de la cámara al personaje
            {
                transform.position = obj.position + ((targetCamDistance * objToCamVec) / objToCamVec.magnitude); //Lo reescalamos al máximo permitido y recolocamos la cámara
            }
        }
        else
        {
            if (!LookingAtCamera)
            {
                vecDisplacement = transform.position - obj.position;
                LookingAtCamera = true;
            }
            else
            {
                transform.position = obj.position + vecDisplacement;
            }
        }
        CheckObstacles();
        transform.LookAt(obj);
    }