Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用
Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用
1. 什么是PhysicsRaycaster组件?
PhysicsRaycaster是Unity UGUI中的一个组件,用于在UI元素上进行物理射线检测。它可以检测鼠标或触摸事件是否发生在UI元素上,并将事件传递给相应的UI元素。
2. PhysicsRaycaster的工作原理
PhysicsRaycaster通过发射一条射线来检测UI元素。当射线与UI元素相交时,PhysicsRaycaster会将事件传递给相应的UI元素。
3. PhysicsRaycaster的常用属性
- Event Mask:指定哪些层的UI元素可以接收事件。
- Max Raycast Distance:指定射线的最大检测距离。
- Blocking Objects:指定哪些类型的物体可以阻挡射线检测。
4. PhysicsRaycaster的常用函数
- Raycast:发射一条射线并返回与之相交的UI元素。
5. 完整例子代码
例子1:点击按钮改变颜色
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ButtonColorChanger : MonoBehaviour, IPointerClickHandler
{
private Image image;
private void Start()
{
image = GetComponent<Image>();
}
public void OnPointerClick(PointerEventData eventData)
{
image.color = Random.ColorHSV();
}
}
操作步骤:
- 创建一个Canvas对象,并在Canvas下创建一个Button对象。
- 将Button对象的Image组件的Color属性设置为任意颜色。
- 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
- 将Button对象的ButtonColorChanger脚本挂载到Button对象上。
- 运行游戏,点击Button对象,颜色会随机改变。
注意事项:
- 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
例子2:拖拽物体
using UnityEngine;
using UnityEngine.EventSystems;
public class ObjectDragger : MonoBehaviour, IPointerDownHandler, IDragHandler
{
private RectTransform rectTransform;
private void Start()
{
rectTransform = GetComponent<RectTransform>();
}
public void OnPointerDown(PointerEventData eventData)
{
rectTransform.SetAsLastSibling();
}
public void OnDrag(PointerEventData eventData)
{
rectTransform.anchoredPosition += eventData.delta;
}
}
操作步骤:
- 创建一个Canvas对象,并在Canvas下创建一个Image对象。
- 将Image对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
- 将Image对象的ObjectDragger脚本挂载到Image对象上。
- 运行游戏,点击Image对象并拖动,Image对象会跟随鼠标或触摸移动。
注意事项:
- 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
例子3:点击按钮播放音效
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ButtonSoundPlayer : MonoBehaviour, IPointerClickHandler
{
public AudioClip soundClip;
private Button button;
private AudioSource audioSource;
private void Start()
{
button = GetComponent<Button>();
audioSource = GetComponent<AudioSource>();
audioSource.clip = soundClip;
}
public void OnPointerClick(PointerEventData eventData)
{
audioSource.Play();
}
}
操作步骤:
- 创建一个Canvas对象,并在Canvas下创建一个Button对象。
- 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
- 在场景中添加一个AudioSource对象,并将音效文件拖拽到ButtonSoundPlayer脚本的soundClip属性上。
- 将Button对象的ButtonSoundPlayer脚本挂载到Button对象上。
- 运行游戏,点击Button对象,音效会播放。
注意事项:
- 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
例子4:点击按钮显示/隐藏物体
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ButtonObjectToggler : MonoBehaviour, IPointerClickHandler
{
public GameObject targetObject;
private Button button;
private void Start()
{
button = GetComponent<Button>();
}
public void OnPointerClick(PointerEventData eventData)
{
targetObject.SetActive(!targetObject.activeSelf);
}
}
操作步骤:
- 创建一个Canvas对象,并在Canvas下创建一个Button对象。
- 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
- 在场景中创建一个需要显示/隐藏的物体,并将该物体拖拽到ButtonObjectToggler脚本的targetObject属性上。
- 将Button对象的ButtonObjectToggler脚本挂载到Button对象上。
- 运行游戏,点击Button对象,物体会显示或隐藏。
注意事项:
- 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
例子5:点击按钮切换场景
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class ButtonSceneSwitcher : MonoBehaviour, IPointerClickHandler
{
public string targetSceneName;
private Button button;
private void Start()
{
button = GetComponent<Button>();
}
public void OnPointerClick(PointerEventData eventData)
{
SceneManager.LoadScene(targetSceneName);
}
}
操作步骤:
- 创建一个Canvas对象,并在Canvas下创建一个Button对象。
- 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
- 在场景中创建一个需要切换到的目标场景,并将目标场景的名称拖拽到ButtonSceneSwitcher脚本的targetSceneName属性上。
- 将Button对象的ButtonSceneSwitcher脚本挂载到Button对象上。
- 运行游戏,点击Button对象,场景会切换到目标场景。
注意事项:
- 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。
参考资料
- Unity官方文档:PhysicsRaycaster
- Unity官方论坛:PhysicsRaycaster
Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用的更多相关文章
- Unity的学习笔记(射线检测)
首先,射线检测的API是这样的,网上找了一下,这个图片看得很清楚: 接下来是自己使用这个进行测试 using System.Collections; using System.Collections. ...
- 日常小节----unity小坑记(射线检测固定层级)
unity中射线检测需设定所需层级时,必须加上距离!!! //一条从主相机到屏幕点击点的射线 Ray ray = Camera.Main.ScreenPointToRay(Input.mousePos ...
- Unity UGUI——提供可视功能的UI组件(Text)
基本属性介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvTXJfQUhhbw==/font/5a6L5L2T/fontsize/400/fill/I0J ...
- UGUI射线检测
1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂上Canvas这个组件(当挂上Graphic Raycaster时Canvas也会自动挂上). Ignor ...
- 【转】 [UnityUI]UGUI射线检测
http://blog.csdn.net/lyh916/article/details/50947026 1.Graphic Raycaster 主要用于UI上的射线检测,挂有这个组件的物体,必须要挂 ...
- unity射线检测
unity中射线检测时非常实用也经常实用的一种手段.下面讲解一下射线检测问题. 1)Ray 根据射线端点和射线的方向定义一条射线 Ray ray= new Ray(transform.position ...
- Unity UGUI Layout自动排版组件用法介绍
Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- Unity射线检测的用法总结
RayCast 射线检测 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享.心 ...
- Unity - Raycast 射线检测
本文简要分析了Unity中射线检测的基本原理及用法,包括: Ray 射线 RaycastHit 光线投射碰撞信息 Raycast 光线投射 SphereCast 球体投射 OverlapSphere ...
- Unity——射线检测(鼠标点击开关门效果)
Unity射线检测--实现简单的开关门效果 简要:通过鼠标点击来发射一条射线,来获得射线所碰到的物体名称,再通过改变门的Rotation值来实现开关门的效果. 一.代码实现 1.1 简易的场景搭建 注 ...
随机推荐
- 我的第一个项目(十二) :分数和生命值的更新(后端增删查改的"改")
好家伙,写后端,这多是一件美逝. 关于这个项目的代码前面的博客有写 我的第一个独立项目 - 随笔分类 - 养肥胖虎 - 博客园 (cnblogs.com) 现在,我们登陆进去了,我开始和敌人战斗,诶 ...
- C# 监听窗口分辨率/DPI变更
当程序运行,窗口已经加载后,如果修改屏幕分辨率,会影响窗口的正常显示. 举个案例: 悬浮窗口,显示在屏幕右下角.当分辨率.文本显示比例变更后,窗口位置可能会超出屏幕范围. 所以当屏幕变更时,我们需要知 ...
- ai问答:使用 Vue3 组合式API 和 TS 封装 websocket 断线重连
这是一个使用 Vue3 组合式 API 和 TS 封装 websocket 的例子 这个组件在 setup 中: 创建了一个 WebSocket 连接 定义了 sendMessage 方法发送消息 监 ...
- 使用NineData定制企业级数据库规范
1. 为什么需要数据库规范? 在企业级应用中,数据库是非常重要的一部分,它们存储着公司的核心数据,包括客户信息.订单.产品信息等等.如果这些数据没有得到妥善的管理,那么就会导致数据不一致.数据丢失.数 ...
- 2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少?
2021-02-08:给定一个字符串str,请问这个字符串的最长回文子序列长度是多少? 福哥答案2021-02-08: 自然智慧即可.1.原序列和反序列求公共子序列.无代码.2.递归.有代码.3.动态 ...
- 2022-02-02:最接近的二叉搜索树值 II。 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值。 注意: 给定的目标值 ta
2022-02-02:最接近的二叉搜索树值 II. 给定一个不为空的二叉搜索树和一个目标值 target,请在该二叉搜索树中找到最接近目标值 target 的 k 个值. 注意: 给定的目标值 tar ...
- Node 调试利器,前端、Node 开发必备 - VSCode JS Debug Terminal
经常看到有同学抱怨 Node 调试麻烦或者是搞不清怎么调试各种脚本.Jest.Webpack 等等,而偶尔看到的调试相关的文章又全都是在写 inspect.launch.json 这些方案,其实有一定 ...
- 【Linux】(小白向)详解VirtualBox网络配置-配置Linux网络
本文时间 2023-05-18 作者:sugerqube漆瓷 本文面向新手,重在理解会舍弃不少精密的理论,还请大佬们见谅. 本文目标:成功使用ssh工具登录linux,同时linux能连接外网. 网络 ...
- 【CF】873B Balanced Substring(前缀和+map)
Balanced Substring 刚讲过差分与前缀和专题,一直以为这两个名词很高大上,其实也就那回事.哈哈. 题源:https://codeforces.com/contest/873/probl ...
- ArcMap手动新建矢量要素的方式
本文介绍在ArcGIS下属ArcMap软件中,新建点.线.面等矢量要素图层,并对新建图层的空间范围加以划定的方法. 首先,在右侧"Catalog"栏中选择需要存放新建立矢量 ...