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);
}
}
}
本系列文章导读:
- Unity热更新方案C#Like(一)-序言
- Unity热更新方案C#Like(二)-导出官方示范的例子,确认方案可行性
- Unity热更新方案C#Like(三)-详解支持的C#特性:类
- Unity热更新方案C#Like(四)-详解支持的C#特性:委托和Lambda
- Unity热更新方案C#Like(五)-详解支持的C#特性:运算表达式
- Unity热更新方案C#Like(六)-详解支持的C#特性:循环语法
- Unity热更新方案C#Like(七)-详解支持的C#特性:get/set访问器
- Unity热更新方案C#Like(八)-详解支持的C#特性:多线程
- Unity热更新方案C#Like(九)-详解支持的C#特性:Using和命名空间
- Unity热更新方案C#Like(十)-详解支持的C#特性:宏和区域
- Unity热更新方案C#Like(十一)-详解支持的C#特性:枚举
- Unity热更新方案C#Like(十二-详解支持的C#特性:参数修饰符
- Unity热更新方案C#Like(十三)-详解支持的C#特性:函数重载和默认参数
- Unity热更新方案C#Like(十四)-详解支持的C#特性:异常处理
- Unity热更新方案C#Like(十五)-详解支持的C#特性:关键字:unsafe typeof nameof $ @ #pragma #warning #error
- Unity热更新方案C#Like(十六)-详解支持的C#特性:其他杂项:初始值设定项,表达式主体,内联变量声明
- Unity热更新方案C#Like(十七)-详解支持的长链接Socket和WebSocket
- Unity热更新方案C#Like(十八)-详解如何和Unity交互
- Unity热更新方案C#Like(十九)-详解KissJSON:唯一可以在本热更新框架使用的JSON库
- Unity热更新方案C#Like(二十)-详解KissCSV:一个简易实用的CSV表格读取方式
- Unity热更新方案C#Like(廿一)-详解KissFrameworkServer:对应的示范例子和官网所用的服务器框架
- Unity热更新方案C#Like(廿二)-详解内置的例子C#Like Demo:飞机大战,简易聊天室,简易账号/物品/邮件系统
- Unity热更新方案C#Like(廿三)-实战:示范如何把Unity官方免费例子Tanks! Tutorial转成可热更新项目
- Unity热更新方案C#Like(廿四)-实战:示范如何把Unity官方免费例子Platformer Microgame转成可热更新项目
- Unity热更新方案C#Like(廿五)-实战:示范如何建立初始包CSharpLikeFreeDemo项目
- Unity热更新方案C#Like(廿六)-(可选)详解免费版的演示如何升级到完整版的演示