如何通过缩放视野来始终保持2个对象在视图中?(或z和y轴)

ste*_*per 5 c# unity-game-engine

我正在为2名玩家制作一个小街机射击游戏,并且需要让屏幕聚焦于2个玩家,我让相机在X轴的玩家中心移动,但是我认为当2玩家靠得更近,相机也越来越近了.

这是透视pov:

jpa*_*maa 13

移动相机比改变fov更好.计算相机距离的公式是

cameraDistance = (distanceBetweenPlayers / 2 / aspectRatio) / Tan(fieldOfView / 2);
Run Code Online (Sandbox Code Playgroud)

请注意,玩家出现在视口的边缘,因此可以添加一些小的边距.这是我的脚本:

public Transform player1;
public Transform player2;

private const float DISTANCE_MARGIN = 1.0f;

private Vector3 middlePoint;
private float distanceFromMiddlePoint;
private float distanceBetweenPlayers;
private float cameraDistance;
private float aspectRatio;
private float fov;
private float tanFov;

void Start() {
    aspectRatio = Screen.width / Screen.height;
    tanFov = Mathf.Tan(Mathf.Deg2Rad * Camera.main.fieldOfView / 2.0f);
}

void Update () {
    // Position the camera in the center.
    Vector3 newCameraPos = Camera.main.transform.position;
    newCameraPos.x = middlePoint.x;
    Camera.main.transform.position = newCameraPos;

    // Find the middle point between players.
    Vector3 vectorBetweenPlayers = player2.position - player1.position;
    middlePoint = player1.position + 0.5f * vectorBetweenPlayers;

    // Calculate the new distance.
    distanceBetweenPlayers = vectorBetweenPlayers.magnitude;
    cameraDistance = (distanceBetweenPlayers / 2.0f / aspectRatio) / tanFov;

    // Set camera to new position.
    Vector3 dir = (Camera.main.transform.position - middlePoint).normalized;
    Camera.main.transform.position = middlePoint + dir * (cameraDistance + DISTANCE_MARGIN);
}
Run Code Online (Sandbox Code Playgroud)