Unity 热更新实例一、C#Light 和UI系统使用实例
接下来我会运用热更新的机制,逐步制作一些例子来阐释脚本系统如何和Unity结合。
脚本不限于使用C#Lite,但是C#Lite会有一些便利之处,请往下看。
结合机制也不限于这一种,但是C#Lite的设计比较倾向于,不让脚本管理状态,不让脚本循环执行,每一段脚本就相当于一个函数。
所以C#Lite不会考虑从脚本内定义新的类型和函数这件事,如果要互相调用,可以让脚本内直接调用另一个脚本。
今天带来的是一个脚本系统控制的界面,这个界面完全是用脚本代码产生的,这个界面系统不用脚本也可以使用,大家一看就知道是用OnGUI制作的。
首先是初始化界面
我们通过这样一个函数建立了如上界面,先不用关心界面系统,只是让脚本不用频繁调用,做了一个树结构把界面元素状态起来。
并且指定了按钮一按下时执行脚本 btn01_click.cls脚本,按钮二按下时执行脚本btn02_click.
在Start中调用codeInit 这个界面就出现了
现在还是程序的写法,接下来,见证奇迹的时刻来了。
只要把codeInit函数体内的内容完全复制到脚本文件中,就是脚本了
可以看到在Unity里作为一个TextAsset存在,这就是热更新的本质了,逻辑在资源里,不是在代码里。
C#Lite比别的脚本语言更适合Unity的是,你完全可以把逻辑在程序里写好,再搬运到脚本中,当然目前C#Lite还没做到c#语法100%兼容。
这里有两个问题要检讨一下:
一、我用了一个特别的写法
CLUI_Node_Label label =(CLUI_Node_Label)objlabel;
而没有使用c#中更适合的 as 表达式,就是因为C#Lite并没有支持 as 表达式,只支持了对一个变量进行类型转换。
另外C#Lite的数字识别不能识别0f,只能识别0。
这两处已经加入buglist,积极改进中。
二、C#Lite的错误提示也不是太友好,只有几种很简单的提示,log不详细,不便于识别问题,也在积极改进中。
最终目标是让脚本和代码可以非常轻易的互换,即使出了错,能详细的提示清楚哪里出错,如何改。
好,接下来就让脚本来处理界面,让代码下岗
见证奇迹的时刻
简单,把函数注释掉,直接执行一个脚本来解决问题。
运行场景,得到和代码执行完美一致的效果。
Unity 热更新实例一、C#Light 和UI系统使用实例的更多相关文章
- unity热更新方案对比
Unity应用的iOS热更新 • 什么是热更新 • 为何要热更新 • 怎样在iOS 上对Unity 应用进行热更新 • 支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...
- 另类Unity热更新大法:代码注入式补丁热更新
对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...
- Unity热更新对比
https://www.jianshu.com/p/f9d90edf4a7c Unity 热更新为啥用Lua 详解 ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优 ...
- Unity热更新技术整理
一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...
- Unity热更新 xLua
xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能.易用性.扩展性而广受好评.现在,腾讯已经将xLua开源到GitHub. 2016年12 ...
- 【转】unity 热更新思路和实现
声明:本文介绍的热更新方案是我在网上搜索到的,然后自己修改了一下,相当于是借鉴了别人的思路,加工成了自己的,在此感谢无私分享经验的朋友们. 想要使用热更新技术,需要规划设计好资源比较策略,资源版本,确 ...
- [Unity热更新]tolua# & LuaFramework(一):基础
一.tolua# c#调用lua:LuaState[变量名/函数名] 1.LuaState a.执行lua代码段 DoString(string) DoFile(.lua文件名) Require(.l ...
- Unity热更新 AssetBundle
在游戏开发中,常常需要用到热更新技术.比如:一个手机游戏开发好后,用户安装到手机上.如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且 ...
- 使用bugly热更新时自定义升级弹窗的UI样式
项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗. 不过UI小姐姐说弹窗太丑了,要自定义. bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/us ...
随机推荐
- Nginx禁止ip访问或IP网段访问方法
Nginx禁止ip访问可以防止指定IP访问我们的网站,本例子可以实现是防止单IP访问或IP网段访问了,非常的有用我们一起来看看吧. 常用的linux做法 iptables参考规则 代码如下 复制代码 ...
- 下拉框数据的动态选择,类似级联ajax刷新数据
简单的两个下拉列表,第二个中的数据与第一个下拉框相关: --------------------var selected = $(this).children('option:selected').v ...
- [11]APUE:(文件)记录锁
[a] 概念 建议锁:在遵循相同记录锁规则的进程间生效,通常用于保证某个程序自身多个进程间的数据一致性 强制锁:意在保证所有进程间的数据一致性,但不一定有效:如不能应对先 unlink 后建立同名副本 ...
- 判断AngularJS渲染页面完成
$scope.$on('$viewContentLoaded', function(){ }); // 或者 $scope.$watch('$viewContentLoaded', function( ...
- SQLite in Windows Store Apps
Using SQLite in Windows Store Apps : https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Using-SQL ...
- .net配置文件读取
public static string LogPath { get { return AppSettingValue(); } } public static string AppSettingVa ...
- 【转】gtk+多线程的程序实例
#include <gtk/gtk.h> gint test() { while(1) { gdk_threads_enter(); g_printf("hello\n" ...
- springboot使用之四:错误页面404处理建议
每个项目可能都会遇到404,403,500等错误代码,如没有错误页面,则会给用户一个很不友好的界面,springboot项目同样也存在这个问题. 但在官方文档并没有相关配置信息,这就要求我们自己来实现 ...
- Microsoft.Office.Interop.Excel 程序集引用 ,Microsoft.Office.Interop.Excel.ApplicationClass 无法嵌入互操作类型
using Microsoft.Office.Interop.Excel 添加程序集引用 方法:在引用--程序集--扩展中,添加引用Microsoft.Office.Interop.Excel,此 ...
- Python 7 —— 扩展与嵌入
Python 7 —— 扩展与嵌入 所谓扩展是指,在Python当中调用其他语言,由于Python的问题主要是效率,这里的扩展主要是指扩展C C++程序(重点) 所谓嵌入是指,在其他语言当中可以调用P ...