当前位置: 首页 > article >正文

Unity 全局屏幕点击特效

思路:

1、生成一个点击特效实例,每点击屏幕,就调整特效实例的位置并控制特效的显隐状态即可。

2、需要注意要保证在编辑器开发时或手机上运行时都要显示点击效果。

方案一 (推荐)

using UnityEngine;
using UnityEngine.EventSystems;

public class ScreenClick : MonoBehaviour,IPointerDownHandler
{
    public GameObject effectPrefab;//特效预制体
    private GameObject clickEffectInstance;
    private RectTransform _Rect;
    
    void Start()
    {
        _Rect = GetComponent<RectTransform>();
        clickEffectInstance = Instantiate(effectPrefab, transform);
        clickEffectInstance.SetActive(false);
    }
    
    public void OnPointerDown(PointerEventData eventData)
    {
        clickEffectInstance.SetActive(false);
        RectTransformUtility.ScreenPointToWorldPointInRectangle(_Rect,eventData.position,eventData.enterEventCamera,out Vector3 pos);
        clickEffectInstance.transform.position = pos;
        clickEffectInstance.SetActive(true);
    }
}

方案二

using UnityEngine;

public class ScreenClick : MonoBehaviour
{
    public GameObject effectPrefab;//特效预制体
    public Camera _Camera;
    private GameObject clickEffectInstance;
    private RectTransform _Rect;
    
    void Start()
    {
        _Rect = GetComponent<RectTransform>();
        clickEffectInstance = Instantiate(effectPrefab, transform);
        clickEffectInstance.SetActive(false);
    }

    void Update()
    {
#if UNITY_EDITOR
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            clickEffectInstance.SetActive(false);
            var screenPos = Input.mousePosition;
            ShowClickEffect(screenPos);
            Debug.Log("222");

        }
#elif UNITY_ANDROID||UNITY_IOS
        if (Input.touchCount > 0)
        {
            var touch = Input.GetTouch(0);
            if (touch.phase == TouchPhase.Began)
            {
                clickEffectInstance.SetActive(false);
                var screenPos = Input.GetTouch(0).position;
                ShowClickEffect(screenPos);
                Debug.Log("333");
            }
        }
#endif
    }
    
    /// <summary>
    /// 显示点击特效
    /// </summary>
    /// <param name="screenPos">点击的屏幕位置</param>
    private void ShowClickEffect(Vector2 screenPos)
    {
        RectTransformUtility.ScreenPointToWorldPointInRectangle(_Rect, screenPos, _Camera, out Vector3 pos);
        clickEffectInstance.transform.position = pos;
        clickEffectInstance.SetActive(true);
    }
}

http://www.kler.cn/a/556230.html

相关文章:

  • Chatgpt论文润色指令整理
  • 在PyTorch中使用插值法来优化卷积神经网络(CNN)所需硬件资源
  • 小结:策略路由(Policy-based Routing,PBR)
  • 相机开发调中广角和焦距有什么不一样
  • 智能网络感知,打造极致流畅的鸿蒙原生版中国移动云盘图文体验
  • 1287. 有序数组中出现次数超过25%的元素
  • OkHttp使用和源码分析学习(二)
  • vue,vue3 keepalive没有效果,无法缓存页面include无效,keep-alive
  • PHP.INI的作用以及如何设置
  • 软著申请都需要哪些材料
  • Python中的Flask深入认知搭建前端页面?
  • ubuntu22.04离线安装K8S
  • 将Neo4j用于Python学习的创新方法
  • deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)
  • 【Qt】数据库编程(SQLite API)
  • 做谷歌SEO的最佳策略是什么?
  • 侯捷 C++ 课程学习笔记:头文件与类的深度解析
  • Brave132编译指南 MacOS篇 - 初始化构建环境(五)
  • java基于数组实现队列
  • iStatistica Pro for Mac v7.0 系统监控工具 支持M、Intel芯片