首页 > 解决方案 > 用于在 Unity 中设置限制时,相机不显示任何内容

问题描述

再会

我正在尝试使用我用来限制 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);
    }

无限制游戏截图: 在此处输入图像描述

有约束的游戏截图: 在此处输入图像描述

我是 Unity 的新手,正在尝试彻底理解它。任何建议都会被大大采纳。

标签: unity3d

解决方案


相机的 Z 位置设置为 0。所有其他对象都具有相同的 Z 位置,因此相机不会渲染它们。

将约束()更改为:

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 是 z 值为 0 的 Vector3。


推荐阅读