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用于计算最后一个贴图的右边缘。