Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.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_2d Games - Fatal编程技术网

C# 将二维摄影机的统一移动限制在地图的边缘

C# 将二维摄影机的统一移动限制在地图的边缘,c#,unity3d,camera,2d-games,C#,Unity3d,Camera,2d Games,我设法计算了我的地图的边缘,但现在我需要这样做,使我的相机边缘不超过我的地图边缘 我的代码如下所示: using UnityEngine; 公共类摄像机运动:单一行为{ public GameObject player; public GameObject firstMap; public GameObject lastMap; private SpriteRenderer spriteRenderer1; private SpriteRenderer spriteRenderer2; pu

我设法计算了我的地图的边缘,但现在我需要这样做,使我的相机边缘不超过我的地图边缘

我的代码如下所示:

using UnityEngine;
公共类摄像机运动:单一行为{

public GameObject player;
public GameObject firstMap;
public GameObject lastMap;
private SpriteRenderer spriteRenderer1;
private SpriteRenderer spriteRenderer2;

public float smoothTimeX;
public float smoothTimeY;

public bool Bounds;

private Vector2 minCameraPos;
private Vector2 maxCameraPos;

// Use this for initialization
void Start()
{
    spriteRenderer1 = firstMap.GetComponent<SpriteRenderer>();
    spriteRenderer2 = lastMap.GetComponent<SpriteRenderer>();
}

void FixedUpdate()
{
    transform.position = new Vector3(player.transform.position.x, player.transform.position.y, transform.position.z);
}

void Update()
{
    Vector3 minCameraEdge = Camera.main.ViewportToWorldPoint(new Vector3(0, 0.5f, Camera.main.nearClipPlane)); // left edge of my camera in x
    Vector3 maxCameraEdge = Camera.main.ViewportToWorldPoint(new Vector3(1, 0.5f, Camera.main.nearClipPlane)); // right edge of my camera in x
    Vector3 minCameraHeight = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0, Camera.main.nearClipPlane)); // bottom edge of my camera in y
    Vector3 maxCameraHeight = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 1, Camera.main.nearClipPlane)); // top edge of my camera in y
    Debug.DrawLine(minCameraEdge, maxCameraEdge, Color.green); //use this to see the left & right edges of the camera update each frame
    Debug.DrawLine(minCameraHeight, maxCameraHeight, Color.green); //use this to see the top & bottom edges of the camera update each frame
    if (Bounds)
    {
        if (minCameraEdge.x < -spriteRenderer1.bounds.extents.x)
            minCameraEdge.x = -spriteRenderer1.bounds.extents.x;
        if (maxCameraEdge.x > spriteRenderer1.bounds.extents.x)
            maxCameraEdge.x = spriteRenderer1.bounds.extents.x;
        if (minCameraHeight.y < -spriteRenderer1.bounds.extents.y)
            minCameraHeight.y = -spriteRenderer1.bounds.extents.y;
        if (maxCameraHeight.y > spriteRenderer1.bounds.extents.y)
            maxCameraHeight.y = spriteRenderer1.bounds.extents.y;
    }
}
公共游戏对象玩家;
公共游戏对象地图;
公共游戏对象地图;
私人喷洒工1;
私人喷灌工2;
公共浮动smoothTimeX;
公共交通畅通;
公共边界;
私人向量机2 minCameraPos;
专用矢量2 maxCameraPos;
//用于初始化
void Start()
{
spritender1=firstMap.GetComponent();
spritender2=lastMap.GetComponent();
}
void FixedUpdate()
{
transform.position=新矢量3(player.transform.position.x,player.transform.position.y,transform.position.z);
}
无效更新()
{
Vector3 minCameraEdge=Camera.main.ViewportToWorldPoint(新Vector3(0,0.5f,Camera.main.nearClipPlane));//我的相机在x轴上的左边缘
Vector3 maxCameraEdge=Camera.main.ViewportToWorldPoint(新Vector3(1,0.5f,Camera.main.nearClipPlane));//我的相机在x轴上的右边缘
Vector3 minCameraHeight=Camera.main.ViewportToWorldPoint(新的Vector3(0.5f,0,Camera.main.nearClipPlane));//我的相机在y方向的底边
Vector3 MaxCamerahHeight=Camera.main.ViewportToWorldPoint(新Vector3(0.5f,1,Camera.main.nearClipPlane));//我的相机在y轴上的上边缘
Debug.DrawLine(minCameraEdge、maxCameraEdge、Color.green);//使用此选项可以查看相机的左边缘和右边缘在每帧更新
Debug.DrawLine(minCameraHeight,maxCameraHeight,Color.green);//使用此选项可以查看相机的上边缘和下边缘更新每个帧
如果(边界)
{
if(minCameraEdge.x<-SpriteEnder1.bounds.extents.x)
minCameraEdge.x=-spritender1.bounds.extensts.x;
如果(maxCameraEdge.x>SpriteEnder1.bounds.extents.x)
maxCameraEdge.x=SpriteEnder1.bounds.extents.x;
if(minCameraHeight.y<-spritender1.bounds.extends.y)
minCameraHeight.y=-spritender1.bounds.extensts.y;
if(maxCameraHeight.y>SpriteEnder1.bounds.extents.y)
maxCameraHeight.y=spritender1.bounds.extensts.y;
}
}

}

只需在第一个和最后一个块中添加一个碰撞器,将图层更改为新的图层,在相机上放置一个长方体碰撞器,将其设置为视图大小,然后将其设置为仅与该图层碰撞

您可以使用层掩码来确保它只与刚刚设置的
边界
层冲突

下面的代码仅与第9层冲突

var layerMask = (1 << 9);

var layerMask=(1)这可能会对您有所帮助:
firstMap
lastMap
到底是什么?firstMap是构成我的关卡的第一个精灵,lastMap是构成我的关卡的最后一个精灵。因此在等式中,firstMap用于计算第一个贴图的左边缘,lastMap用于计算最后一个贴图的右边缘。