Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图设置摄影机边界时,摄影机会飞离_C#_Unity3d_Camera - Fatal编程技术网

C# 试图设置摄影机边界时,摄影机会飞离

C# 试图设置摄影机边界时,摄影机会飞离,c#,unity3d,camera,C#,Unity3d,Camera,玩家控制摄像机的移动来环视水平面,我试图设置边界,这样摄像机就不会走得太远。但是,当我添加边界代码时,每当我按下按钮移动时,相机就会飞离 if (Input.GetKey("d")) { transform.Translate(new Vector2(camSpeed * Time.deltaTime, 0)); transform.position = new Vector2(Mathf.Clamp(transform.pos

玩家控制摄像机的移动来环视水平面,我试图设置边界,这样摄像机就不会走得太远。但是,当我添加边界代码时,每当我按下按钮移动时,相机就会飞离

 if (Input.GetKey("d"))
        {
            transform.Translate(new Vector2(camSpeed * Time.deltaTime, 0));

            transform.position = new Vector2(Mathf.Clamp(transform.position.x, minX, maxX), 0);


        }
        if (Input.GetKey("a"))
        {
            transform.Translate(new Vector2(-camSpeed * Time.deltaTime, 0));

            transform.position = new Vector2(Mathf.Clamp(transform.position.x, minX, maxX), 0);
        }
        if (Input.GetKey("w"))
        {
            transform.Translate(new Vector2(0, camSpeed * Time.deltaTime));

            transform.position = new Vector2(0, Mathf.Clamp(transform.position.y, minY, maxY));
        }
        if (Input.GetKey("s"))
        {
            transform.Translate(new Vector2(0, -camSpeed * Time.deltaTime));

            transform.position = new Vector2(0, Mathf.Clamp(transform.position.y, minY, maxY));
        }

我已将“最小值”和“最大值”设置为高于所需水平的值,并且无论设置为什么值,相机仍会飞离。

解释我的评论;不是每次使用W或S移动时都将x设置为0,而是应将夹紧移动到末端,夹紧x和y(可能保持Z值?):


您的
minY
maxY
minX
maxX
的值是多少?@Ruzihm无论值是多少,它都会飞出。目前要测试它们是-1000和1000。首先,您可能不应该设置
transform.position=newvector2(0,Mathf.Clamp(transform.position.y,minY,maxY))
在每个
中,如果
,只需在末尾执行一次即可。现在的方法,你每次移动Y位置时,都将X位置设置为0,反之亦然。我还将其更改为
transform.position=newvector2(Mathf.Clamp(transform.position.x,minX,maxX),Mathf.Clamp(transform.position.y,minY,maxY))是2d还是3d?这就解决了问题!非常感谢。
if (Input.GetKey("d"))
{
    transform.Translate(new Vector2(camSpeed * Time.deltaTime, 0));
}
if (Input.GetKey("a"))
{
    transform.Translate(new Vector2(-camSpeed * Time.deltaTime, 0));
}
if (Input.GetKey("w"))
{
    transform.Translate(new Vector2(0, camSpeed * Time.deltaTime));
}
if (Input.GetKey("s"))
{
    transform.Translate(new Vector2(0, -camSpeed * Time.deltaTime));
}

transform.position = new Vector3(
    Mathf.Clamp(transform.position.x, minX, maxX), 
    Mathf.Clamp(transform.position.y, minY, maxY), 
    transform.position.z
);