Unity2D平台跳跃游戏摄像机的区域限制

分类栏目:unity3d教程

197

Unity2D平台跳跃游戏摄像机的区域限制
如上图:
有时候我们不希望摄像机在跟踪角色的时候会跑到背景地图之外的地方,这样会给人一种穿帮的感觉。
我们或许只希望摄像机的左边框移动到地图的左边缘处就停止跟踪,也就是图中粉色箭头画出的区域限制以内。

我一贯用的办法是这样的:
1.在摄像机上添加一个BoxCollider2D组件,并且打钩 ? Is Trigger 这一选项,然后编辑一下box的范围,使其尽量跟摄像机边缘对其,其实这个box什么用都没有,不执行任何的碰撞检测,目的只是为了通过BoxCollider2D组件的bounds.size.x属性÷2得到摄像机长度的一半。
2.接下来我们需要获得地图最左边和最右边的点的位置,跟摄像机一样,也是用BoxCollider2D组件,这样就能通过BoxCollider2D.bounds.min.x和max.x获得地图左右两边的X坐标了。
3.获得角色的x坐标,transform.position.x就可以直接拿到了。
4.开始逻辑的计算,逻辑上是这样实现的:

if((角色当前的x坐标) > (地图最左边的点的x坐标 + 摄像机box的半径) && (角色当前的x坐标) < (地图最右边的点的x坐标 - 摄像机box的半径)){

    摄像机.transform.position = Vector3.Lerp(摄像机.transform.position,角色.transform.position,float);

}

else

if((角色当前的x坐标) <= (地图最左边的点的x坐标 + 摄像机box的半径)){

    摄像机.transform.position = Vector3.Lerp(摄像机当前坐标,地图最左边的点的x坐标 + 摄像机box半径,float);

}

else

if((角色当前的x坐标) >= (地图最右边的点的x坐标 - 摄像机box的半径)){

    摄像机.transform.position = Vector3.Lerp(摄像机当前坐标,地图最右边的点的x坐标 - 摄像机box半径,float);

}

以上,就是实现摄像机区域限制的基本思路了。