Unity热更新方案C#Like(四)-详解支持的C#特性:委托和Lambda

C#Like是Unity的热更方案,使用纯C#语言写出可以热更新的代码,就像可以在所有平台使用DLL(动态链接库)文件一样.遵从KISS设计原则,让用户轻松构建或升级成Unity的热更新项目.

简介

本篇主要介绍C#Like支持的C特性:委托和Lambda.这两个功能和C#Light比较暂没有突破.

  • 委托:简单的把方法委托到非热更代码.
  • Lambda:暂只支持Lambda语句(input-parameters) => { <sequence-of-statements> },且input-parameters不能省略类型,暂未支持Lambda表达式(input-parameters) => expression;

示范例子:

内置示范例子里的"Test C#"按钮,进入的测试界面有3个按钮'Test Delegate','Test Lambda','Test Bind'和一个Text组件,3个按钮依次测试委托,测试Lambda,测试预制体绑定函数,代码如下:

using UnityEngine;    
using UnityEngine.EventSystems;    
using UnityEngine.UI;    
    
namespace CSharpLike    
{    
    public partial class ExampleCSharp : LikeBehaviour    
    {    
        void TestDelegateAndLambda()    
        {    
            Debug.LogError("Test delegate and lambda:");    
            //测试委托,这里通过代码方式指定按钮'Test Delegate'的按钮响应函数为OnClickDelegate    
            HotUpdateManager.AddEventTrigger(GetGameObject("TestDelegate"), EventTriggerType.PointerClick, OnClickDelegate);    
            //测试Lambda,这里指定按钮'Test Lambda'的按钮响应为下面Lambda代码    
            HotUpdateManager.AddEventTrigger(GetGameObject("TestLambda"), EventTriggerType.PointerClick,    
                (BaseEventData eventData) =>    
                {    
                    GetComponent<Text>("TestMessage").text = "OnClickLambda";    
                    Debug.Log("On click lambda :" + eventData);    
                });    
        }    
        /// <summary>    
        /// 委托方式绑定的函数.    
        /// 这里是按钮'Test Delegate'绑定按钮点击响应函数    
        /// </summary>    
        void OnClickDelegate(BaseEventData eventData)    
        {    
            GetComponent<Text>("TestMessage").text = "OnClickDelegate";    
            Debug.Log("OnClickDelegate:" + eventData);    
        }    
        /// <summary>    
        /// 由预制体里面的按钮组件直接绑定的函数.    
        /// 这里是按钮'Test Bind'绑定按钮点击响应函数    
        /// 这个是Button组件最简洁的点击响应函数    
        /// </summary>    
        void OnClickBindButton()    
        {    
            GetComponent<Text>("TestMessage").text = "OnClickBindButton";    
            Debug.Log("OnClickBindButton:");    
        }    
        /// <summary>    
        /// 这里示范Button组件的OnClick事件绑定HotUpdateBehaviour.OnClick可以传入特定参数,让多个按钮组件调用同一个热更新的函数.    
        /// 例如按钮A的绑定参数填OnClickTestWithParam(1,"abc")表示点击该按钮调用OnClickTestWithParam(1,"abc");
        /// </summary>    
        void OnClickTestWithParam(int i, string str)    
        {      
            Debug.Log("OnClickTestWithParam:i=" + i + ",str=" + str);    
        }  
        /// <summary>    
        /// 由预制体里面的EventTrigger组件直接绑定的函数.    
        /// 这里是按钮'Test Bind'绑定按钮鼠标进入响应函数    
        /// 不推荐这种方式,因为同一个热更代码只有1种同类型的响应函数,且函数名字不能修改    
        /// 推荐使用HotUpdateManager.AddEventTrigger的方式    
        /// </summary>    
        void OnPointerEnter(BaseEventData eventData)    
        {    
            GetComponent<Text>("TestMessage").text = "OnPointerEnter";    
            Debug.Log("OnPointerEnter:" + eventData);    
        }      
    }    
}

 本系列文章导读:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C#Like

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值