Камера Unity2D уменьшает масштаб на расстоянии игрока от объекта, Увеличивает при удалении - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над 2D-платформой с боковым скроллером, и у меня есть момент, когда на заднем плане есть фокус, на котором я хочу показать игроку момент «ш» и хочу уменьшить масштаб камера, чтобы показать этот момент, а затем снова увеличить масштаб. Полагаю, вы могли бы сказать, что делаете то же самое, что Гамбит Смерти или полый Рыцарь, когда объект, который они хотят показать, слишком велик для размера камеры.

Попытка получить преобразование от игрока в определенной области и рассчитать расстояние до точки, где я хочу, чтобы размер камеры достиг максимума, а затем вычислить процент от него, чтобы добавить умноженную на разность размеров, но это портил бы порт просмотра, уменьшая его или уменьшая до максимально допустимого значения.

Ожидаемый результат состоит в том, чтобы уменьшить масштаб камеры с расстоянием до определенной точки в мире, минуя эту точку, она перестает уменьшать масштаб, при движении назад следует увеличить масштаб до игрока с начальным OrtographicSize.

Спасибо за помощь!

1 Ответ

0 голосов
/ 13 июня 2019

Вы можете сделать:

public Transform Target1;
public Transform Target2;

public float sensetivity = 1f;
public float maxOrthographicSize = 10f;

Camera thisCam;
float minOrthographicSize = 5f;

private void Start() {
    thisCam = GetComponent<Camera>();
    minOrthographicSize = thisCam.orthographicSize;
}
void Update()
{
    thisCam.orthographicSize = minOrthographicSize + Mathf.Clamp(Vector2.Distance(Target1.position, Target2.position) * sensetivity, 0f, maxOrthographicSize);
}

В этом решении minOrthographicSize может произойти, только если Target1 и Target2 находятся в одной позиции, изменить которые вы можете:

public Transform Target1;
public Transform Target2;

public float minOrhtographicDistance = 5f;
public float sensetivity = 1f;
public float maxOrthographicSize = 10f;

Camera thisCam;
float min = 5f;

private void Start() {
    thisCam = GetComponent<Camera>();
    min = thisCam.orthographicSize;
}
void Update()
{
    thisCam.orthographicSize = min + Mathf.Clamp((Vector2.Distance(Target1.position, Target2.position) - minOrhtographicDistance) * sensetivity, 0f, maxOrthographicSize);
}

В этом решении ортогональный размер будет minOrthographicSize для minOrhtographicDistance расстояния, а затем будет меняться в зависимости от расстояния между целями.

...