当前位置:   article > 正文

Unity中的两种射线检测方式(物理与UI)_unity射线检测ui

unity射线检测ui
射线检测的总归思路就是先创建一条射线射向某个位置,将碰撞到的物体信息存起来进行比对,下面针对物理射线检测以及UI适用的射线检测分别解释

一、射线检测(物理)

定义你需要射向的位置坐标并确定他是屏幕坐标,这里我用鼠标位置

1.1获取鼠标位置:Input.mousePosition;这是一个三维向量,用Vector3接受

1.2屏幕向鼠标位置发射射线:Camera.main.ScreenPointToRay(mousePos);

1.3定义RaycastHit用来存储射线碰撞信息

1.4进行判断

代码如下:

  1. void Update()
  2. {
  3. if (Input.GetMouseButtonDown(0))
  4. {
  5. Vector3 mouseposition = Input.mousePosition;
  6. Ray ray = Camera.main.ScreenPointToRay(mouseposition);
  7. RaycastHit hit;
  8. if (Physics.Raycast(ray, out hit))
  9. {
  10. Debug.Log("射线击中了物体: " + hit.collider.name);
  11. }
  12. }
  13. }

二、射线检测(UI)

流程思路与之前相同:

1.创建PointerEventData对象,PointerEventData专门用来存储和传递指针信息,例如鼠标。EventSystem.current代表当前正在活动的事件系统。获取鼠标的位置。

2.RaycastResult用来存储Unity事件系统中的射线信息

3.EventSystem.current.RaycastAll(SaveMousePosition, result);表示从SaveMousePosition位置发射一条射线,经过的ui信息都存储于result中。

4.遍历result中存储的信息进行判断

代码如下:

  1. PointerEventData SaveMousePosition = new PointerEventData(EventSystem.current);
  2. SaveMousePosition.position = Input.mousePosition;
  3. List<RaycastResult> result = new List<RaycastResult>();
  4. EventSystem.current.RaycastAll(SaveMousePosition, result);
  5. foreach (RaycastResult raycast in result)
  6. {}

结尾:有任何错误请指出,补充请评论,看到会第一时间回复,谢谢。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/630255
推荐阅读
相关标签
  

闽ICP备14008679号