接下来我会运用热更新的机制,逐步制作一些例子来阐释脚本系统如何和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系统使用实例的更多相关文章

  1. unity热更新方案对比

    Unity应用的iOS热更新 •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对Unity 应用进行热更新 •  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...

  2. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

  3. Unity热更新对比

    https://www.jianshu.com/p/f9d90edf4a7c Unity 热更新为啥用Lua 详解 ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优 ...

  4. Unity热更新技术整理

    一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...

  5. Unity热更新 xLua

    xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能.易用性.扩展性而广受好评.现在,腾讯已经将xLua开源到GitHub. 2016年12 ...

  6. 【转】unity 热更新思路和实现

    声明:本文介绍的热更新方案是我在网上搜索到的,然后自己修改了一下,相当于是借鉴了别人的思路,加工成了自己的,在此感谢无私分享经验的朋友们. 想要使用热更新技术,需要规划设计好资源比较策略,资源版本,确 ...

  7. [Unity热更新]tolua# & LuaFramework(一):基础

    一.tolua# c#调用lua:LuaState[变量名/函数名] 1.LuaState a.执行lua代码段 DoString(string) DoFile(.lua文件名) Require(.l ...

  8. Unity热更新 AssetBundle

    在游戏开发中,常常需要用到热更新技术.比如:一个手机游戏开发好后,用户安装到手机上.如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且 ...

  9. 使用bugly热更新时自定义升级弹窗的UI样式

    项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗. 不过UI小姐姐说弹窗太丑了,要自定义. bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/us ...

随机推荐

  1. Crystal Reports拉报表报错:Error detected by database DLL

    问题描述: 最近在使用Crystal Reports打印报表时,提示错误信息:"Error detected by database DLL." 如下图: 经查找,是因为数据库名称 ...

  2. AspNetPager 免费分页控件7.5.1版发布!

    AspNetPager 免费分页控件7.5.1版发布,本次升级主要内容有: 修正了ShowDisabledButtons为false时html闭合标签丢失的bug:改为从System.Web.UI.W ...

  3. MySQL数据库sql语句的一些简单优化

    1.查询条件的先后顺序 有多个查询条件时,要把效率高能更精确筛选记录的条件放在后边.因为MySQL解析sql语句是从后往前的(不知是否准确). 例: select a.*,b.* from UsrIn ...

  4. Unity 编辑器的 界面布局 保存方法

    在软件界面的右上角(关闭按钮的下方),点击  layout  (界面)的下拉箭头. 弹出选项中的 save layout....(保存界面选项),输入命名,就可以生成这个界面的布局.  (软件本身也有 ...

  5. CAD 二次开发----- 块(一)

    1.块定义与块参照两个概念 块定义类似于模具,而块参照类似于模具浇筑出来的模型,在图形中只需用块定义来保存块的实际几何组成,而仅用插入点和比例因子来存储块定义,因为块参照的几何形状与快参照完全一样,仅 ...

  6. set命令

    set命令简介 set命令是shell中初学者比较少接触,但是却很有用的一个命令(这里我们说的shell指的是bash).set命令是shell解释器的一个内置命令,用来设置shell解释器的属性,从 ...

  7. webkit浏览器css设置滚动条

    主要有下面7个属性: ::-webkit-scrollbar 滚动条整体部分,可以设置宽度啥的 ::-webkit-scrollbar-button 滚动条两端的按钮 ::-webkit-scroll ...

  8. 字符串流stringstream(头文件sstream)

    今天看到一样很有趣的东西,可以用于各种类型的转换.其实一个文本可以看作一个长长的字符串,整数啊浮点数的都是字符串,于是在字符串流里面就可以很方便地玩转各种类型,比如说: #include<ios ...

  9. [UCSD白板题] Number of Inversions

    Problem Introduction An inversion of a sequence \(a_0,a_1,\cdots,a_{n-1}\) is a pair of indices \(0 ...

  10. being词典案例分析

    一.调研评测: 1.软件bug: 1.输入空格分号回车之后并不给用户报错,说明他的异常处理机制有问题. 2.对于中文的很多口头语和方言,并不能给出翻译或者说,也并没有给出网络搜索后的结果. 3.添加生 ...