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

    1. eye_gaze https://github.com/iitmcvg/eye-gaze 2.deepgaze https://github.com/mpatacchiola/deepgaze ...

  2. IOS 代码提示有问题

    Window(menu) -> Organizer(menu) -> Projects(tab) 删除 Derived Data ,立刻关闭xcode 然后重启xcode然后重新打开项目.

  3. ubuntu与win10互换硬盘

    实例:将sdb上的ubuntu转移至sda,将sda上的win转移至sdb1. 备份资料2. 制作老毛桃PE盘3. 格式化sda4. dd if=/dev/sdb of=/dev/sda ,将sdb克 ...

  4. 多次drawRect,显示重叠,需要设置背景颜色

    自己写的一个控件,中途在setNeedsDisplay,重写drawRect方法,有时会把以前drawRect绘制上去,不知道为什么,后来设置了控件的背景颜色backgroundcolor,这个问题就 ...

  5. C# 有关打印机的连接判断...随便看看

    各位coder手下留情 /// <summary> /// 判断是否连接打印机 /// </summary> public bool CheckPrinter() { //取得 ...

  6. SIGGRAPH2016【转】

    本文摘自:http://blog.selfshadow.com/ Open Access SIGGRAPH 2016 Conference Content (for a limited time) R ...

  7. jfinal框架页面找不到相关css,js文件404

    在JFinalConfig中添加配置: @Override public void configHandler(Handlers handlers) { handlers.add(new Contex ...

  8. HTML5调用手机相机拍照

    前端调用手机相机拍照 实现方式常见有两种: 一种是通过video控件,通过捕获video的流,截取video中的图像实现拍照, 还有一种是通过input[file]控件调用移动端的摄像头,实现拍照. ...

  9. Java程序,取随机数的两种实现方法

    1.随机数的第一种程序(取0-9的整型随机数) public class random_1 { public static void main(String[] args) { Random r=ne ...

  10. CrossApp入门简介

    来自9miao社区的CrossApp号称可以极大的简化移动应用的开发,因为开源的时间不长,有效的资料不多. 官方网站: http://crossapp.9miao.com/ 环境搭建说明:http:/ ...