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 简易的场景搭建 注 ...
随机推荐
- 快速上手Linux核心命令(五):文本处理三剑客
@ 目录 前言 正则表达式 第一剑客 grep 第二剑客 sed 第三 剑客 awk 小结 剑仙镇楼~ O(∩_∩)O 前言 上一篇中已经预告,我们这篇主要说Linux文本处理三剑客.他们分别是gre ...
- C# 信号锁SemaphoreSlim
关于锁,我们经常会使用lock object对象,进行资源访问的限制. 但,lock是有限制的,无法添加异步方法.编译器会报错. 下面推荐另一个类SemaphoreSlim,这是信号量的一个使用类.先 ...
- [Pytorch框架]3.2 MNIST数据集手写数字识别
文章目录 3.2 MNIST数据集手写数字识别 3.2.1 数据集介绍 3.2.2 手写数字识别 3.2 MNIST数据集手写数字识别 import torch import torch.nn as ...
- 音视频八股文(2)--ffmpeg常见命令(1)
官方文档: https://www.ffmpeg.org/ffplay-all.html https://www.ffmpeg.org/ffmpeg-all.html 01-Windows FFMPE ...
- 2022-05-23:给定一个数组arr,你可以随意挑选其中的数字, 但是你挑选的数中,任何两个数a和b,必须Math.abs(a - b) > 1。 返回你最多能挑选几个数。 来自美团。
2022-05-23:给定一个数组arr,你可以随意挑选其中的数字, 但是你挑选的数中,任何两个数a和b,必须Math.abs(a - b) > 1. 返回你最多能挑选几个数. 来自美团. 答案 ...
- 2021-06-12:已知一棵搜索二叉树上没有重复值的节点,现在有一个数组arr,是这棵搜索二叉树先序遍历的结果。请根据arr生成整棵树并返回头节点。
2021-06-12:已知一棵搜索二叉树上没有重复值的节点,现在有一个数组arr,是这棵搜索二叉树先序遍历的结果.请根据arr生成整棵树并返回头节点. 福大大 答案2021-06-12: 先序遍历+中 ...
- uni-app 背景图片
背景图片 uni-app 支持使用在 css 里设置背景图片,使用方式与普通 web 项目大体相同,但需要注意以下几点: 支持 base64 格式图片. 支持网络路径图片. 小程序不支持在 css 中 ...
- Node.js出现‘Cannot find module init’ 解决方法
1. 首先查看当前根目录是否有node_module文件夹,如果有,请删除 2. 输入 npm clean cache 3. 再次输入 node init -y 大功告成
- .Net使用第三方onnx或ModelBuilder轻松接入AI模型
ML.Net - 开源的跨平台机器学习框架 支持CPU/GPU训练 轻松简洁的预测代码 可扩展其他的机器学习平台 跨平台 1.使用Visual Studio的Model Builder训练和使用模型 ...
- nodejs 中 stream.pipe()直接将文件输出到页面乱码
最近仿照anywhere写个anyentry目录读取器,发现使用stream.pipe()将文件输入到页面时,出现中文乱码 看哇 看到着实不爽,不解决咋能算 于是开始寻找问题根源 一.配置encodi ...