点击按钮出现弹窗 怎么实现_【厚积薄发】按钮穿透点击实现方式

b7ae49a79baeae28437f9c1caa92241b.png

这是第149篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

UWA 问答社区:answer.uwa4d.com

UWA QQ群2:793972859(原群已满员)

本期目录:

  • 按钮穿透点击实现方式

  • 根据Mesh名称查找其在FBX中的路径

  • 使用IL2CPP后是否存在Mono内存

  • 实例化Prefab时Mesh合并

  • UGUI TEXT里的Best Fit性能消耗

UI

Q:在按钮重叠情况下,如何实现点上面的按钮能同时让下面的按钮也执行?就是想让我的触摸监听能穿透下去不会停止,请问在UGUI上要怎么做?

A:我们是给需要做这种处理的控件上挂了一个脚本来实现的,没有修改EventSystem的源码。对应你的需求,可能要做一个全屏的UI来专门检测滑动时间。

using UnityEngine;using System.Collections;using UnityEngine.EventSystems;using UnityEngine.UI;using System.Collections.Generic;namespace KEngine.UI
{public class TouchPenetrate : MonoBehaviour, IPointerClickHandler
    {public bool PenetrateOneLayer = true;//监听点击public void OnPointerClick(PointerEventData eventData){//PassEvent(eventData, ExecuteEvents.submitHandler);
            PassEvent(eventData, ExecuteEvents.pointerClickHandler);
        }//把事件透下去public void PassEvent(PointerEventData data, ExecuteEvents.EventFunction function)where T : IEventSystemHandler
        {
            List results = new List();
            EventSystem.current.RaycastAll(data, results);
            GameObject current = data.pointerCurrentRaycast.gameObject;for (int i = 0; i             {if (current != results[i].gameObject)
                {
                    ExecuteEvents.Execute(results[i].gameObject, data, function);if (PenetrateOneLayer)
                    {//只触发一层事件break;
                    }
                }
            }
        }
    }
}

感谢贾伟昊@UWA问答社区提供了回答,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5c627f5d63826a332ad994fe

Editor

Q:现在项目需要进行一些资源的清理,将一些不需要的Mesh去掉。因而,需要获取所有Prefab中使用的Mesh所在FBX中的路径,然后FBX回建模软件,将其中不再用到的Mesh删除。现在能通过名称获取Prefab中的Mesh所在的FBX,但如果FBX中存在同名Mesh,如何确定用到的是哪个Mesh呢?

A:无法直接通过名称获取Mesh所在FBX中的路径,但是可以通过对比找到其在FBX中具体是哪个Mesh,然后再查找路径:

private static string GetMeshPath(string modelPath, MeshFilter prefabFilter) {
    GameObject model = AssetDatabase.LoadAssetAtPath(modelPath);if (!model) {
        Debug.LogWarning("No game object found at " + modelPath, prefabFilter);return null;
    }
    MeshFilter modelFilter = null;foreach (MeshFilter filter in model.GetComponentsInChildren(true)) {if (filter.sharedMesh == prefabFilter.sharedMesh) {
            modelFilter = filter;break;
        }
    }if (!modelFilter) {
        Debug.LogWarning("No game object found for " + prefabFilter, prefabFilter);return null;
    }
    Transform transform = modelFilter.transform;string path = transform.name;while (transform.parent) {
        transform = transform.parent;
        path = transform.name + "/" + path;
    }return path;
}

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5c639ada2b3589332f1a4998

IL2CPP

Q:使用了IL2CPP后是否还存在Mono内存,使用IL2CPP后,通过Profiler工具获取的Manage Object(例如: Int32[])是哪种内存?

A:可以简单的认为,IL2CPP 只是替换掉了Mono的虚拟机实现,所以该分配堆内存的地方还是会一样的分配(可能会有某些细节的地方不一样)。

IL2CPP在堆内存分配方面和Mono最大的不同主要是Reserved Total是可以下降的,而Mono的Reserved Total只会上升不会下降。

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5a0271297acd3ac1606d5d32

Mesh

Q:Prefab包含了多个Sub Mesh,当在场景中初始化该Prefab时,这些Sub Mesh进行了合并,怎么避免它们合并?

A:取消勾选Import Settings里面的“Weld Vertices“试试。该选项会自动合并位置相同的顶点,并且默认开启。

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5c64ef092b3589332f1a49fd

UGUI

Q:看了一些UGUI优化的文章,都提到TEXT里不要勾选Best Fit属性。但是我在Profiler里的Frame Debugger里没有找到相关的Text_OnPopulateMesh消耗数值。是不是意味着当前UI里勾选的Best Fit并没有造成太大的性能消耗?或者说在哪能查到当前UI里Best Fit相关的消耗?

PS:内存那块也没有看到相应的变化。

A:Best Fit主要功能是文本框内的字号会随着文本框大小改变而自动适配,通常来说,会带来两个问题:

1.  游戏中的字号不统一,比如21、22、23、24都有可能,由于每个字号下新生成的字都会在对应的Font Texture上占用一个字的大小,所以容易导致Font Texture内存占用过大;

2.  运行过程中动态修改文本框大小导致的额外开销,在某些项目中遇到过会对文本框大小进行动态调整(比如文字动画),如果这类文本勾选了Best Fit,就会有一个额外的CPU耗时。

Font Texture的尺寸会受字体种类、字号、文本内容多少影响,如果看到没有发生变化可能是内容还没有超过512*1024的范围,或者看一下是否生成了另一张Font Texture?BestFit对这个的影响主要还是字号不统一,如果勾选了但字号没有变化,也不会造成影响。

该回答由UWA提供,欢迎大家转至社区交流:

https://answer.uwa4d.com/question/5c63b4ed2b3589332f1a4999

今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

官网:www.uwa4d.com

官方技术博客:blog.uwa4d.com

官方问答社区:answer.uwa4d.com

官方技术QQ群:793972859(原群已满员)

封面图来源:Unity UI Framework 

https://lab.uwa4d.com/lab/5b5d24a5d7f10a201feac572

神秘嘉宾揭晓中!

4117144deb55eba35b05c3068b51b7c4.png

近期精彩回顾

【博物纳新】战争迷雾开源库评测!

【厚积薄发】Unity动画图和人形动画初探!

【厚积薄发】游戏中遮挡剔除方案总结!

【万象更新】看完性能简报,想不优化好都难!

b67ff8984b99c9ae9dde6a225f6f2f3d.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值