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.position.x);
//世界坐标右边界
rightBorder = cornerPos.x;
//世界坐标上边界
topBorder = cornerPos.y;
//世界坐标下边界
downBorder = Camera.main.transform.position.y - (cornerPos.y - Camera.main.transform.position.y);
width = rightBorder - leftBorder;
height = topBorder - downBorder;
//在默认比例:16:9下的宽高
float deffultH = 13.85643f;
float deffultW = 24.60183f;
//缩放求出比例
scale = new Vector3(width/deffultW, height/deffultH, 0);
}
把上述代码挂在到摄像机上,当摄像机就位后运行,就能得到:
- 画面四个边界的世界坐标
- 当前画面比例下与默认画面比例的缩放比
其中物体运行到视野外销毁还可以使用另一种方法:
使用 OnBecameInvisible() 函数
//物体进入视野内触发响应函数
public void OnBecameVisible(){}
//物体离开视野内触发响应函数
public void OnBecameInvisible(){}
版权声明:本文为qq_44705559原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。