Камера не отображает ничего в зажатом положении, используется для установки ограничений в Unity - PullRequest
0 голосов
/ 08 октября 2018

Добрый день

Я пытаюсь ограничить движение своей камеры, используя функцию, которую я использую для ограничения других элементов в 2D-игре.Когда я вызываю эту функцию с помощью моей камеры, она делает что-то странное.

По какой-то причине она ничего не отображает, как только я вызываю функцию.Я проверил положение камеры с помощью Debug.log, и она, кажется, находится в том же месте.Кажется, что ограничения также работают, но это бесполезно, если ничего не отображается.

Я использую функцию Mathf.Clamp, чтобы попытаться ограничить карту.Я знаю, что есть много обучающих программ, показывающих, как ограничить движение карты, и, честно говоря, мой подход кажется похожим.

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

Мой код выглядит следующим образом:

    int cameraSpeed = 10;  
    GameObject camera;
    int maxX = 20;
    int minX = -20;
    int maxY = 20;
    int minY = -20;

    // Use this for initialization
    public void constrain(GameObject obj)
    {
        Vector2 pos = obj.transform.position;
        pos.x = Mathf.Clamp(pos.x, -maxX, maxX);
        pos.y = Mathf.Clamp(pos.y, -maxY, maxY);
        obj.transform.position = pos;
    }

    void Start () {
        camera = GameObject.Find("Main Camera");
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKey(KeyCode.RightArrow))
        {
            camera.transform.Translate(new Vector2(cameraSpeed * Time.deltaTime, 0));
        }
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            camera.transform.Translate(new Vector2(-cameraSpeed * Time.deltaTime, 0));
        }
        if (Input.GetKey(KeyCode.DownArrow))
        {
            camera.transform.Translate(new Vector2(0, -cameraSpeed * Time.deltaTime));
        }
        if (Input.GetKey(KeyCode.UpArrow))
        {
            camera.transform.Translate(new Vector2(0, cameraSpeed * Time.deltaTime));
        }
        Debug.Log(camera.transform.position.x);
        Debug.Log(camera.transform.position.y);
        constrain(camera);
    }

Снимок экрана игры без ограничений:enter image description here

Снимок экрана игры с ограничениями: enter image description here

Я новичок в Unity и пытаюсь полностью понять его.Любой совет будет очень уместным.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Мне удалось найти ошибку с помощью @ DerwB.Теперь я вижу, что камера должна иметь более низкий индекс z, чем объекты, которые она отображает.Ответ DerwB близок к решению, но он не позволяет повторно использовать функцию для ограничения других объектов.

Таким образом, я изменил функцию следующим образом:

public void constrain(GameObject obj, bool isCamera = false)
    {
        Vector3 pos = obj.transform.position;
        pos.x = Mathf.Clamp(pos.x, -maxX, maxX);
        pos.y = Mathf.Clamp(pos.y, -maxY, maxY);
        if(isCamera)
            pos.z = 0;
        else
            pos.z = 1;
        obj.transform.position = pos;
    }

Затем вы вызываетедля камеры действует следующая функция:

  GameObject camera = GameObject.Find("Main Camera");
  constrain(camera.gameObject,true); //if you are constraining the camera object

И так, если вы ссылаетесь на другие игровые объекты:

  GameObject player= GameObject.Find("Player");
  constrain(player.gameObject,true); //skip the optional parameter if not referencing the camera
0 голосов
/ 08 октября 2018

Z-позиция вашей камеры установлена ​​на 0. Все остальные ваши объекты имеют одинаковую Z-позицию, поэтому камера не будет отображать их.

Измените constrain () на:

public float zPos = -10
public void constrain(GameObject obj)
{
    Vector3 pos = obj.transform.position;
    pos.x = Mathf.Clamp(pos.x, -maxX, maxX);
    pos.y = Mathf.Clamp(pos.y, -maxY, maxY);
    pos.z = zPos
    obj.transform.position = pos;
}

и это должно исправить.

РЕДАКТИРОВАТЬ: Причина, по которой это происходит, потому что вы использовали Vector2 для вашей позиции камеры.В Unity Vector2 - это Vector3 со значением z, равным 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...