Exemplo n.º 1
0
    private void PlaceCamera(Camera camera)
    {
        // set the target position
        float   targetTime     = meanTargetTime * Random.value * 2;
        Vector3 targetPosition = ball.GetApproximateBallPosition(targetTime);

        // set the camera's position
        Vector3 cameraPosition = targetPosition + new Vector3(Random.value * 2 - 1, 0, Random.value * 2 - 1).normalized *(minCameraDistance + Random.value * 2 * (meanCameraDistance - minCameraDistance));

        cameraPosition.y = minCameraHeight + Random.value * 2 * (meanCameraHeight - minCameraHeight);

        // set the camera's view direction
        Vector3    cameraForward  = (targetPosition - cameraPosition).normalized;
        Quaternion cameraTilt     = Quaternion.AngleAxis(meanCameraTilt * (Random.value * 2 - 1), cameraForward);
        Vector3    cameraUp       = Vector3.Cross(cameraForward, Vector3.Cross(Vector3.up, cameraForward)).normalized;
        Quaternion cameraRotation = Quaternion.LookRotation(cameraForward, cameraTilt * cameraUp);

        // apply changes to camera
        camera.transform.position = cameraPosition;
        camera.transform.rotation = cameraRotation;
        camera.focalLength        = minCameraFocalLength - Mathf.Log(1 - Random.value) * (meanCameraFocalLength - minCameraFocalLength);
        camera.lensShift          = Random.insideUnitCircle.normalized * Random.value * meanCameraLensShift * 2;

        // apply camera targeting offset
        camera.transform.rotation = Quaternion.AngleAxis(camera.fieldOfView * meanCameraOffset * (2 * Random.value - 1), camera.transform.up) * camera.transform.rotation;
        camera.transform.rotation = Quaternion.AngleAxis(camera.fieldOfView * meanCameraOffset * (2 * Random.value - 1), camera.transform.right) * camera.transform.rotation;

#if UNITY_EDITOR
        Debug.DrawRay(cameraPosition, camera.transform.forward * (cameraPosition - targetPosition).magnitude, Color.green, 10.0f);
        Debug.DrawLine(targetPosition, cameraPosition, Color.blue, 10.0f);
#endif
    }