Unity获取屏幕边缘与检测物体是否在视野内
1. 需求描述
当游戏打包发布时,需要解决目前市场上各式各样屏幕比例的自适应问题。
UI方面只要在编辑器中设置好就问题不大,主要是游戏实体的缩放与生成和销毁位置的问题。
需求如下:
- 陆地块的生成位置必须在屏幕外
- 陆地块的开始运动位置必须在屏幕右侧边缘
- 陆地块运动至屏幕外需要销毁
- 陆地块右侧边缘位于屏幕右侧边缘时,需要启动下一个陆地块
- 时间环无论在什么屏幕下都应该充满背景
3.3.4.2 代码实现
想要实现如上需求,就必须要知道屏幕的边缘在哪里,也就是将屏幕的边缘坐标从屏幕坐标转化为世界坐标。可以通过如下代码实现:
public float leftBorder;
public float rightBorder;
public float topBorder;
public float downBorder;
public float height;
public float width;
public Vector3 scale;
public void initBorder()
{
//世界坐标的右上角 因为视口坐标右上角是1,1,点
Vector3 cornerPos = Camera.main.ViewportToWorldPoint(new Vector3(1f, 1f,Mathf.Abs(-Camera.main.transform.position.z)));
//世界坐标左边界
leftBorder = Camera.main.transform.position.x - (cornerPos.x - Camera.main.transform.posit