首页 > 其他分享 >Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

Unity UGUI的PhysicsRaycaster (物理射线检测)组件的介绍及使用

时间:2023-07-28 10:24:13浏览次数:41  
标签:UnityEngine 对象 Button Canvas Unity using PhysicsRaycaster UGUI

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();
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的Image组件的Color属性设置为任意颜色。
  3. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  4. 将Button对象的ButtonColorChanger脚本挂载到Button对象上。
  5. 运行游戏,点击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;
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Image对象。
  2. 将Image对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 将Image对象的ObjectDragger脚本挂载到Image对象上。
  4. 运行游戏,点击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();
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中添加一个AudioSource对象,并将音效文件拖拽到ButtonSoundPlayer脚本的soundClip属性上。
  4. 将Button对象的ButtonSoundPlayer脚本挂载到Button对象上。
  5. 运行游戏,点击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);
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中创建一个需要显示/隐藏的物体,并将该物体拖拽到ButtonObjectToggler脚本的targetObject属性上。
  4. 将Button对象的ButtonObjectToggler脚本挂载到Button对象上。
  5. 运行游戏,点击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);
    }
}

操作步骤

  1. 创建一个Canvas对象,并在Canvas下创建一个Button对象。
  2. 将Button对象的PhysicsRaycaster组件的Event Mask属性设置为默认值。
  3. 在场景中创建一个需要切换到的目标场景,并将目标场景的名称拖拽到ButtonSceneSwitcher脚本的targetSceneName属性上。
  4. 将Button对象的ButtonSceneSwitcher脚本挂载到Button对象上。
  5. 运行游戏,点击Button对象,场景会切换到目标场景。

注意事项

  • 需要在Canvas对象上添加一个Graphics Raycaster组件,以便PhysicsRaycaster能够工作。

参考资料

标签:UnityEngine,对象,Button,Canvas,Unity,using,PhysicsRaycaster,UGUI
From: https://www.cnblogs.com/alianblank/p/17586869.html

相关文章

  • Unity下如何实现低延迟的全景RTMP|RTSP流渲染
    技术背景Unity3D可以用于创建各种类型的的应用程序,包括虚拟现实、培训模拟器等。以下是一些可以使用Unity3D全景播放的场景:虚拟现实体验:全景视频可以用来创建逼真的虚拟环境,使用户能够感受到身临其境的感觉;培训模拟器:全景视频可以用来创建真实的训练环境,例如飞行模拟器、驾驶模拟器......
  • Unity中查找物体
    最清晰的Unity查找物体的几种方法及优缺点详解!其他教程有很多没注意的地方,请看这里!_heliocentricism的博客-CSDN博客 ......
  • ugui源码阅读 - Graphic渲染原理
    3d部分使用MeshRenderer来渲染,ugui的使用CanvasRenderer来进行渲染。把顶点,材质,贴图设置给CanvasRenderer,就能渲染出来了。 下面的代码,我们直接使用CanvasRenderer来进行渲染,等同于Graphic渲染部分的核心代码。usingUnityEngine;usingUnityEngine.UI;[RequireComponent(......
  • Unity UGUI的EventSystem(事件系统)组件的介绍及使用
    UnityUGUI的EventSystem(事件系统)组件的介绍及使用1.什么是EventSystem组件?EventSystem是UnityUGUI中的一个重要组件,用于处理用户输入事件,如点击、拖拽、滚动等。它负责将用户输入事件传递给合适的UI元素,并触发相应的事件回调函数。2.EventSystem组件的工作原理EventSystem......
  • visual studio community 2017 许可证即将过期
     打开发现通知,许可证即将过期点击后如图所示发现点击更新后根本没用,打不开其内容,看了数个文章,尝试后发现这是只需要关闭wifi(PS:比如校园网等),打开使用自己的热点进行连接即可进去加载页面然后根据提示进行简单操作即可,我使qq邮箱登录的社区版,这样微软直接给你发个qq邮箱验......
  • Unity 生成多边形最简单的方法
    按照正常的思维,先将多边形进行三角剖分,生成网格,再添加碰撞器,去实现业务逻辑多边形三角化是件麻烦事,还需要考虑多边形的凹凸性,有没有洞等其实可以反其道而行,先添加碰撞器,通过碰撞器生成mesh,代码比较简单,直接上代码usingSystem.Collections;usingSystem.Collections.Generic;......
  • Unity UGUI的EventSystem(事件系统)组件的介绍及使用
    UnityUGUI的EventSystem(事件系统)组件的介绍及使用1.什么是EventSystem组件?EventSystem是UnityUGUI中的一个重要组件,用于处理用户输入事件,如点击、拖拽、滚动等。它负责将用户输入事件传递给合适的UI元素,并触发相应的事件回调函数。2.EventSystem组件的工作原理EventSystem......
  • Unity UGUI的RawImage(原始图片)组件的介绍及使用
    UnityUGUI的RawImage(原始图片)组件的介绍及使用1.什么是RawImage组件?RawImage是UnityUGUI中的一个组件,用于显示原始图片。与Image组件不同,RawImage可以直接显示原始图片的像素数据,而不需要经过额外的处理。2.RawImage组件的工作原理RawImage组件通过将原始图片的像素数据直......
  • UnityHub AndroidSDKManager在哪
    UnityHubAndroidSDKManager在哪引言作为一名经验丰富的开发者,我很乐意教会你如何在UnityHub中找到AndroidSDKManager。在本文中,我将详细介绍整个过程,并提供每个步骤所需的代码和注释。过程概述在UnityHub中找到AndroidSDKManager可以让我们更方便地管理Android开发所需的SDK和......
  • Unity3D 使用带刚体组件的预制体配合脚本自动生成一面墙时上层墙体被弹飞
    异常效果如下图所示:预制体是一个正方体(Cube),其参数设置如下图所示:控制墙面生成的C#脚本如下所示:usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassWall:MonoBehaviour{publicTransformbrick;//Usethisf......