[Unity3D] 如何识别屏幕边缘
2024-08-23 00:52:59
出现的问题
- Unity3D中长度单位是米
- 使用Screen.resolutions获取的屏幕信息单位是像素
也就是说,即使获取了屏幕相关信息及参数,也无法把信息转换成可在editor中使用的信息。当时想在做Protect The Red 。
于是,就开始了自己的谷歌之旅。
在StackExchange和Unity Answers上翻了翻,最终搞懂了,大致思路是这样的。
解决思路
- 获取Viewport里的右上角(z=Mathf.Abs(Camera.main.transform.position.z))
- 使用ViewportToWorldPoint 将Vieport坐标转化为WordlPoint,游戏世界里的位置
代码实现
[HideInInspector]public float leftBorder;
[HideInInspector]public float rightBorder;
[HideInInspector]public float topBorder;
[HideInInspector]public float downBorder;
private float width;
private float height; void SetBasicValues(){
//the up right corner
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; }
成果--守住红色
最终的结果是这样的,墙壁游戏运行后一直处在屏幕的四边。将小球控制在屏幕内。
最新文章
- 无限循环轮播图之结构布局(原生JS)
- 关于angularjs中的jQuery
- java集合学生管理系统
- jfinal基本应用 --报主键重复
- Node.js文件系统、路径的操作详解
- 本地推送UILocalNotification
- 学习node-formidable
- 【uTenux实验】互斥体
- 【转】maven命令背后是如何工作的
- JavaScript中childNodes、children、nodeValue、nodeType、parentNode、nextSibling详细讲解
- 数据库基本概念-oracle介绍
- xv6中存储cpu和进程信息的技巧
- 使用CXF开发JAX-WS类型的WebService
- H5+JS+JQuery+ECharts实现异步加载
- onoffswitch-checkbox
- MySQL中遇到的几种报错及其解决方法
- Spring 下 MyBatis 的基本使用
- linux shell系列9 统计用户的权限
- redis高级应用(集群搭建、集群分区原理、集群操作)
- P2144 [FJOI2007]轮状病毒
热门文章
- 面试题18(一):在O(1)时间删除链表结点
- js判断IP字符串是否正确
- [CentOS7] 常用工具 之 差异备份工具 rdiff-backup
- Pillow不支持color emoji font!
- linux线程私有数据---TSD池
- [Xcode 实际操作]三、视图控制器-(7)UINavigationController自定义导航按钮
- Spring Boot整合实战Spring Security JWT权限鉴权系统
- Apple开发者账号更改公司名称
- Maven项目聚合 jar包锁定 依赖传递 私服
- UIScrollView嵌套滑动手势冲突的简易实现