赞
踩
背景
我们知道Unity3d是通过C#脚本语言的形式来实现游戏的逻辑代码编写,同样SCOTT服务器也设置了通过C#脚本来实现游戏逻辑,但是本文并不是想真正分析解密他们的运行机制,只是想通过自己的一个需求,来探讨总结下其中的原理。
下面来说下我自己的需求,比较简单,由于经常在非开发环境部署一些小工具,做系统维护,但每次又懒得带笔记本和编译环境到现场,但系统数据又总是那么奇葩,时常有bug出现,突发奇想是否是能把工具做成脚本,这样现场就很容易进行调整(简单修改脚本),现场搞定不用来回折腾,岂不是很Happy。
原理
Unity3d使用的Mono这个地球人知道,Scott呢?我以前分析过其源码,大概知道它需要兼容IconPyhton和C#两种脚本,所以它做了一层封装,但是看它引用的DLL lib有Mono的影子,所以估计也是Mono(不对请拍砖,其实它用什么无所谓了)。实际原理很简单了,也就是脚本动态编译(有点像解释执行,严格上应该不是,我觉得李总的热更新的脚本应该不是动态编译的因为很多平台根本不支持比如IOS),查了下资料目前c#动态编译的一共三种方式CodeDom,Mono,Roslyn,这三种教程应该是一堆一堆的,但是Mono和Roslyn的都不是很多,毕竟这个需求比较小众,而且Roslyn是最新出来的,例子都是“Hello world”级别的让人很不爽,最后发现一个库CS-Script,看了下文档,瞟一眼代码:CSScript.EvaluatorConfig.Engine = EvaluatorEngine.Roslyn;
//Evaluator
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。