unity射线ScreenPointToRay以屏幕中点的位置发射射线

在Unity开发第一人称游戏时,为了实现以准星位置发射射线,通常会利用ScreenPointToRay方法。本文介绍了如何通过屏幕中点(Screen.width / 2, Screen.height / 2)生成射线,并强调ScreenPointToRay接受的是屏幕位置而非世界坐标。了解世界坐标与屏幕坐标的转换,对于正确使用此方法至关重要。" 106557887,8499673,东北大学C语言实验:计算阶乘和,"['C语言编程', '编程题解', '东北大学课程', '计算机科学', '算法']
摘要由CSDN通过智能技术生成

第一人称游戏往往有一个准星UI,如果要往准星UI的位置发射一条射线,就可以使用"屏幕位置"来获取准星UI的位置。

如图:

 

在unity中,左下角的屏幕位置为(0,0),右上角的屏幕位置是(Screen.width,Screen.height)(注意x为宽,y为高)。如图可以了解到,在屏幕位置中,左下角是最小值,右上角为最大值,那么中点自然就是(Screen.width / 2, Screen.height / 2)了。

如果你需要的不是Input.mousePosition鼠标位置,而是屏幕中点,那么这条射线应该这样获取:

m_ray = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0));

 

ScreenPointToRay()方法:屏幕像素点转换成射线,通常值都是Input.mousePosition,实际上Input.mousePosition获取的也是屏幕点,也就是屏幕位置,而非世界坐标。

详细的世界坐标与屏幕坐标的区别可以看这篇文章:https://blog.csdn.net/yongh701/article/details/71423029

Unity中,让相机跟随鼠标并发射射线(Raycast)指向鼠标所在的世界位置,可以按照以下步骤操作: 1. 获取鼠标点击的位置:首先,你需要获取鼠标当前在屏幕上的位置,使用`Input.mousePosition`获取屏幕坐标。 2. 将屏幕坐标转换为世界坐标:使用`Camera.main.ScreenToWorldPoint`方法,将屏幕坐标转换为相机的视野内的世界空间坐标。 3. 创建Raycast:创建一个Ray,起点设为相机的中心位置,方向指向刚才得到的世界坐标。可以这样构造: ```csharp Vector3 mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Ray ray = Camera.main.transform.position + Camera.main.transform.forward * (mouseWorldPosition - Camera.main.transform.position).magnitude; ``` 4. 进行碰撞检测:调用`Physics.Raycast(ray, out RaycastHit hit)`,这里假设`hit`变量会包含击中物体的信息(如`hit.point`代表击中位置)。 5. 可能的话,你可以检查`hit.collider`是否非空,来确定是否真的有物体被击中。 完整的代码片段如下: ```csharp if (Input.GetMouseButtonDown(0)) { Vector3 mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Ray ray = Camera.main.transform.position + Camera.main.transform.forward * (mouseWorldPosition - Camera.main.transform.position).magnitude; RaycastHit hit; if (Physics.Raycast(ray, out hit)) { // 打印或使用hit.point进行进一步操作 Debug.Log("Clicked at World Position: " + hit.point); } } ``` 请注意,上述代码只会在左键按下时进行一次射线检测。如果你希望实时更新,需要将其放在循环里或者监听鼠标移动事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值