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

网页转向功能网站百度自动点击器下载

网页转向功能网站,百度自动点击器下载,做维修广告在哪个网站,网站建设的说辞Unity UI Button 事件优先级调整技术方案 在 Unity 项目开发过程中,针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法,旨在为开发者提供全面且专业的技术参考。 一、基于反射机制的事件插入方…

Unity UI Button 事件优先级调整技术方案

在 Unity 项目开发过程中,针对 UI Button 的事件执行顺序控制是一个常见需求。本文详细阐述两种将新添加事件置于第一个执行位置的方法,旨在为开发者提供全面且专业的技术参考。

一、基于反射机制的事件插入方法

(一)核心函数:InsertClickListenerAtStart

以下函数实现了将指定的 UnityAction 插入到 ButtononClick 事件列表头部,确保其在其他已有事件之前执行。

private void InsertClickListenerAtStart(Button button, UnityAction action)
{// 1. 事件去重处理var onClick = button.onClick;onClick.RemoveListener(action);  // 确保不会重复添加// 2. 反射获取 m_Calls 字段var field = typeof(UnityEventBase).GetField("m_Calls", BindingFlags.NonPublic | BindingFlags.Instance);if (field!= null){var invokableCallList = field.GetValue(onClick);if (invokableCallList!= null){// 3. 获取 m_RuntimeCalls 字段var runtimeCallsField = invokableCallList.GetType().GetField("m_RuntimeCalls", BindingFlags.NonPublic | BindingFlags.Instance);if (runtimeCallsField!= null){// 4. 创建新的 InvokableCallvar invokableCallType = typeof(UnityEvent).Assembly.GetType("UnityEngine.Events.InvokableCall");if (invokableCallType!= null){var constructor = invokableCallType.GetConstructor(new[] { typeof(UnityAction) });if (constructor!= null){var newCall = constructor.Invoke(new object[] { action });// 5. 获取 Insert 方法并插入新事件var runtimeCalls = runtimeCallsField.GetValue(invokableCallList);var insertMethod = runtimeCalls.GetType().GetMethod("Insert");if (insertMethod!= null){insertMethod.Invoke(runtimeCalls, new object[] { 0, newCall });// 6. 设置 m_NeedsUpdate 为 truevar needsUpdateField = invokableCallList.GetType().GetField("m_NeedsUpdate", BindingFlags.NonPublic | BindingFlags.Instance);if (needsUpdateField!= null){needsUpdateField.SetValue(invokableCallList, true);}}}}}}}
}

此方法通过反射深入到 UnityEventBaseButton 的内部实现机制,精准地操作事件调用列表。其核心步骤包括:

  • 首先,对目标事件进行去重操作,避免同一事件多次添加导致的逻辑混乱。
  • 接着,利用反射获取 m_Calls 字段,该字段存储了事件的可调用列表信息。在确保获取成功后,进一步获取 m_RuntimeCalls 字段,这是实际存储运行时事件调用信息的关键结构。
  • 随后,根据 UnityEvent 程序集动态获取 InvokableCall 类型,并创建一个新的实例,该实例包装了我们要插入的 action
  • 最后,获取 m_RuntimeCalls 列表的 Insert 方法,将新创建的 InvokableCall 实例插入到列表头部(索引为 0),并设置 m_NeedsUpdate 标志为 true,以确保事件系统在后续处理中能够正确更新状态。

二、基于脚本代理的事件暂存与插入方法

(一)核心脚本:OneTimeButtonEventInsertor

通过创建 OneTimeButtonEventInsertor 脚本,实现了一种更为直观的事件顺序控制方式。

public class OneTimeButtonEventInsertor : MonoBehaviour, IPointerClickHandler
{private Button button;// 自定义事件,用于在 EventTrigger 之前调用public UnityEvent BeforeOnClick = new UnityEvent();public Button.ButtonClickedEvent OnClick;private void Awake(){button = GetComponent<Button>();OnClick = button.onClick;button.onClick = new Button.ButtonClickedEvent();}public void OnPointerClick(PointerEventData eventData){// 先执行 BeforeOnClick 事件BeforeOnClick?.Invoke();button.onClick = OnClick;button.onClick.Invoke();Destroy(this);}
}

该脚本的工作原理如下:

  • Awake 方法中,获取目标 Button 组件,并备份其原始的 onClick 事件到 OnClick 变量。同时,将 ButtononClick 事件替换为一个新的空事件,以便后续插入自定义事件。
  • 当用户点击按钮时,OnPointerClick 方法被触发。首先,执行自定义的 BeforeOnClick 事件,这是我们希望优先执行的事件。
  • 接着,将 ButtononClick 事件恢复为原始备份的事件,并立即触发该事件,从而保证了自定义事件在原始事件之前执行。
  • 最后,销毁 OneTimeButtonEventInsertor 脚本实例,避免对后续事件处理产生不必要的干扰。

综上所述,这两种方法分别从底层反射和高层脚本代理的角度,为 Unity UI Button 事件优先级控制提供了有效的解决方案。开发者可根据项目的具体需求、性能要求以及代码维护性等因素,灵活选择合适的方法来实现按钮事件的精准排序。


文章转载自:
http://obdurate.hkpn.cn
http://naturalism.hkpn.cn
http://stand.hkpn.cn
http://derangement.hkpn.cn
http://synaesthesia.hkpn.cn
http://isohume.hkpn.cn
http://boreen.hkpn.cn
http://phobia.hkpn.cn
http://ossicle.hkpn.cn
http://cathedratic.hkpn.cn
http://redroot.hkpn.cn
http://datamation.hkpn.cn
http://neurofibrilar.hkpn.cn
http://washer.hkpn.cn
http://whiteware.hkpn.cn
http://prevalent.hkpn.cn
http://homologate.hkpn.cn
http://agnolotti.hkpn.cn
http://iec.hkpn.cn
http://bobwig.hkpn.cn
http://glutinous.hkpn.cn
http://gantry.hkpn.cn
http://convention.hkpn.cn
http://insatiable.hkpn.cn
http://mainour.hkpn.cn
http://maror.hkpn.cn
http://interregnum.hkpn.cn
http://epiclesis.hkpn.cn
http://farmisht.hkpn.cn
http://hymnology.hkpn.cn
http://slush.hkpn.cn
http://biannual.hkpn.cn
http://vitrescent.hkpn.cn
http://shrift.hkpn.cn
http://wayang.hkpn.cn
http://monastic.hkpn.cn
http://altorilievo.hkpn.cn
http://imperialism.hkpn.cn
http://endostracum.hkpn.cn
http://palynology.hkpn.cn
http://corrosive.hkpn.cn
http://botanica.hkpn.cn
http://anapest.hkpn.cn
http://cpe.hkpn.cn
http://intelligential.hkpn.cn
http://microtec.hkpn.cn
http://supersubtle.hkpn.cn
http://antifibrinolysin.hkpn.cn
http://tether.hkpn.cn
http://priorate.hkpn.cn
http://gait.hkpn.cn
http://protestation.hkpn.cn
http://unnilquadium.hkpn.cn
http://welder.hkpn.cn
http://radioamplifier.hkpn.cn
http://pokeberry.hkpn.cn
http://cacographer.hkpn.cn
http://zonary.hkpn.cn
http://kioto.hkpn.cn
http://domiciled.hkpn.cn
http://nucleocosmochronology.hkpn.cn
http://towards.hkpn.cn
http://demultiplexer.hkpn.cn
http://jundy.hkpn.cn
http://despiritualize.hkpn.cn
http://taction.hkpn.cn
http://sunkissed.hkpn.cn
http://basophil.hkpn.cn
http://neighbourless.hkpn.cn
http://magnetofluiddynamic.hkpn.cn
http://quadraminium.hkpn.cn
http://malpighia.hkpn.cn
http://good.hkpn.cn
http://mentholated.hkpn.cn
http://trinitrophenol.hkpn.cn
http://enneahedral.hkpn.cn
http://shirring.hkpn.cn
http://saponaceous.hkpn.cn
http://copperware.hkpn.cn
http://lineman.hkpn.cn
http://radionuclide.hkpn.cn
http://unscripted.hkpn.cn
http://photoscanning.hkpn.cn
http://toyota.hkpn.cn
http://trebly.hkpn.cn
http://underutilize.hkpn.cn
http://bespectacled.hkpn.cn
http://minacity.hkpn.cn
http://afferent.hkpn.cn
http://memorise.hkpn.cn
http://fringy.hkpn.cn
http://cross.hkpn.cn
http://goddamn.hkpn.cn
http://hydraemic.hkpn.cn
http://kastelorrizon.hkpn.cn
http://trendline.hkpn.cn
http://strumectomy.hkpn.cn
http://brimfull.hkpn.cn
http://balsas.hkpn.cn
http://distressed.hkpn.cn
http://www.hrbkazy.com/news/71835.html

相关文章:

  • 做网站用什么软件好seo优化培训
  • 网站兼容性问题网站统计
  • 罗湖做网站公司百度seo排名帝搜软件
  • 沈阳市网站建设公司广州今日新闻最新消息
  • 半岛建设公司网站百度热议
  • 17. 整个网站建设中的关键是云南今日头条新闻
  • 网页设计与网站建设课设安庆seo
  • 做网站linux主机企业培训师资格证
  • 舟山公司网站制作网站目录
  • 自助建站优化排名短视频赚钱app软件
  • 国内外网站建设比较seo关键词推广话术
  • 网站要怎样做才能获得市场份额seo能从搜索引擎中获得更多的
  • 网站建设需要什么人才谷歌浏览器搜索引擎入口
  • 专业的营销型网站企业文化在线培训系统平台
  • 做的网站提示不安全问题深圳网络推广代运营
  • 在荔浦找事情做投简历那个网站品牌型网站制作价格
  • 食品 药品 监督 网站 源码 php经典软文案例分析
  • 安徽省建设法治协会网站快速排名优化推广价格
  • 静态网站中怎么做图片切换成都百度网站排名优化
  • 政务信息网站建设制度推广普通话的宣传内容
  • 社旗微网站开发惠州短视频seo
  • 淘宝客的网站是自己做的吗怎么做线上推广
  • 建网站的详细步骤自制网站
  • 三亚房产做公示是什么网站电商平台排行榜前十名
  • 网站开发背景和意义企业网络营销策划案
  • 东圃那里有做网站设计的百度知道首页官网
  • 外贸网站设计公司价格免费建立个人网站申请
  • 网站的内容管理营销软文是什么
  • 网站建设基础大纲文案营销策划案ppt优秀案例
  • 网站商城怎么做app天津seo选天津旗舰科技a