Unity基于EventSystem让SpriteRenderer支持点击事件

若2D场景中使用了UGUI的UI系统,则默认是有EventSystem的。否则可以创建个UGUI的物体,然后保留EventSystem,删除其它不需要的。

场景主相机添加Physics2DRaycaster组件,并妥善设置其EventMask属性。

为SpriteRenderer物体添加诸如BoxCollider2D等碰撞体组件,否则其接受不到射线检测。

下面扩展一个SpriteRendererButton组件,并添加到SpriteRenderer物体上:

csharp 复制代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;


public class SpriteRendererButtonClickEvent : UnityEvent
{
}

public class SpriteRendererButton : MonoBehaviour, IPointerClickHandler
{
    public bool enable = true;
    public SpriteRendererButtonClickEvent onClick = new SpriteRendererButtonClickEvent();

    public void OnPointerClick(PointerEventData eventData)
    {
        if (enable)
        {
            onClick?.Invoke();
        }
    }
}

后面的用法就和传统Button一样了!

同理3D项目中物体也可以使用类似的方式,使得3D物体可以使用我们熟悉的类似UGUI的点击事件。

相关推荐
nnsix42 分钟前
Unity API 兼容的 .NET Standard 2.1 和 .NET Framework 区别
unity·游戏引擎·.net
mxwin1 小时前
Unity Shader 制作半透明物体 使用多Pass提前写入深度的方式 避免穿模
unity·游戏引擎
nnsix3 小时前
Unity HybridCLR 笔记
笔记·unity·游戏引擎
nnsix4 小时前
Unity Addressables 笔记
unity·游戏引擎
RReality4 小时前
【Unity Shader URP】视差贴图 实战教程
ui·平面·unity·游戏引擎·图形渲染·贴图
小清兔19 小时前
Addressable的设置打包流程
笔记·游戏·unity·c#
3D霸霸21 小时前
Sourcetree 拉取新工程
数据仓库·unity
程序员正茂1 天前
Unity3d中RawImage显示视频画面偏白的解决方法
unity·视频·rawimage
mxwin1 天前
Unity SetPassCall和DrawCall的区别是什么
unity·游戏引擎·shader
电子云与长程纠缠1 天前
UE5 GameFeature创建与使用
开发语言·学习·ue5·游戏引擎