unity3d(2d!) перевести точку между двумя камерами

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

Мне не удалось адаптировать скрипт для работы с несколькими камерами, поэтому я решил, что следующим лучшим вариантом будет перевод точек из четырех углов из окна просмотра первой камеры в мировое положение, а затем из мирового положения обратно в окно просмотра. камер 2, 3 и 4. Однако это не работает.

    SpriteRenderer spriteBounds = GameObject.Find("Map").GetComponentInChildren<SpriteRenderer>();
    float leftBound =0;
    float rightBound =0;
    float bottomBound =0;
    float topBound = 0;

    if((trackPlayer1 == null))
    {
        camPlayer1.transform.position = this.transform.position;
    }
    else
    {
        float vertExtent = camPlayer1.orthographicSize;
        float horzExtent = vertExtent * (Screen.width * (camPlayer1.rect.width * 2)) / Screen.height; //I guess the problem is here... but how do I fix this??

        leftBound = (float)(horzExtent - spriteBounds.sprite.bounds.size.x / 2.0f);
        rightBound = (float)(spriteBounds.sprite.bounds.size.x / 2.0f - horzExtent);
        bottomBound = (float)(vertExtent - spriteBounds.sprite.bounds.size.y / 2.0f);
        topBound = (float)(spriteBounds.sprite.bounds.size.y / 2.0f - vertExtent);

        camPlayer1.transform.position = new Vector3(Mathf.Clamp(trackPlayer1.transform.position.x, leftBound, rightBound), Mathf.Clamp(trackPlayer1.transform.position.y, bottomBound, topBound), camPlayer1.transform.position.z);
    }
    if((trackPlayer2 == null))
    {
        camPlayer2.transform.position = this.transform.position;
    }
    else
    {

        leftBound = camPlayer1.ViewportToWorldPoint(new Vector3(leftBound, 0, 0)).x;
        rightBound = camPlayer1.ViewportToWorldPoint(new Vector3(rightBound, 0, 0)).x;
        bottomBound = camPlayer1.ViewportToWorldPoint(new Vector3(0, bottomBound, 0)).y;
        topBound = camPlayer1.ViewportToWorldPoint(new Vector3(0, topBound, 0)).y;

        leftBound = camPlayer2.WorldToViewportPoint(new Vector3(leftBound, 0, 0)).x;
        rightBound = camPlayer2.WorldToViewportPoint(new Vector3(rightBound, 0, 0)).x;
        bottomBound = camPlayer2.WorldToViewportPoint(new Vector3(0, bottomBound, 0)).y;
        topBound = camPlayer2.WorldToViewportPoint(new Vector3(0, topBound, 0)).y;

        camPlayer2.transform.position = new Vector3(Mathf.Clamp(trackPlayer2.transform.position.x, leftBound, rightBound), Mathf.Clamp(trackPlayer2.transform.position.y, topBound, bottomBound), camPlayer2.transform.position.z);
    }

person LairdPleng    schedule 08.01.2015    source источник
comment
Вернемся к вашей первой проблеме... ваш скрипт работает только на первой камере, а на остальных нет. Скрипт был привязан к каждой камере или это был глобальный скрипт?   -  person Gounemond    schedule 08.01.2015
comment
это глобальный скрипт. camPlayer1 - camPlayer4 и trackPlayer1 - trackPlayer4 передаются по ссылке. Камеры отслеживают игроков нормально, но как только я начинаю пытаться зажимать позиции, это не работает. Я разместил исходную проблему здесь   -  person LairdPleng    schedule 08.01.2015