开篇之前还是要先说明,这是一份给经验并不丰富的程序员阅读的文字。

有需求、有疑惑,往下看。

第一个问题什么是脚本?程序和脚本如何区分?我们给Unity编写的组件是程序还是脚本?

这些问题本文无意去解答,因为其中混合着太多有立场的东西,站在不同的立场会有不同的看法,这其中的矛盾不是简单可以调和的。

只要提出一个观点,就很容易陷入语言大战的泥潭。

我们不妨从另一个角度来思考,为什么要分程序和脚本,是为了找一条分界线。

这条分界线叫做灵活。

我们这个专题的出发点是探讨Unity3D客户端资源更新,已这个出发点划条线,不灵活的站左边,灵活的站右边。

试思考如下情景

一个玩家,初始HP200,初始MP200

我们采用两个方案来完成

左边 右边
组件里直接写代码
Player.HP=200;
Player.MP=200;
写一个配置文件Player.InI
HP=200
MP=200

组件里写代码
Player.HP = GetInIValue(“HP”);
Player.MP=GetInIValue(“MP”);

当策划(万恶的策划,本篇的主要反面人物)说哎呀,不行,玩家的初始HP要改成500。

从我们的出发点来衡量:

左边,灾难,玩家要再经历一次下载安装客户端的煎熬。

右边,只要让Player.InI更新到客户端,这就可以在玩家重启客户端的时候完成。

左边,不符合资源更新的精神。

右边,符合。

此时我们就认为右边的Player.Ini是一种脚本,我们所称的脚本就是可以让逻辑发生变化的东西。

这时候有一些经验的人可能会站出来反对:那是配置文件,算什么脚本,脚本要逻辑的。

反对有效,让我们更进一步

Player.InI

HP = (today==Monday)?100:200

MP =(today==Sunday)?400:200

如此,你还会认为配置文件和脚本是完全不相干的东西么?

如果你对三目运算符不是那么熟悉,可以看看展开的写法

if(today==Monday)HP=100

else HP=200;

if(today==Sunday)MP=400

else MP=200;

通过这个代码可以看出策划如此做的用意:我们的主人公有周一恐惧症,周一HP减半,周日太High,估计是个码农,周六加了一天班,周日开心的MP翻倍。

只要我们假定策划的这种点子根本停不下来,隔三差五就要改一次。

你是不是会产生一种强烈的冲动:恨不得把所有代码写在配置文件的字符串里。

这就是脚本,写在字符串里的代码。只因为字符串够灵活。

执行字符串里的代码,有个叫法,叫做Eval。

我们将在下一篇来点实例。

顺便一提C#也被一部分人认为是写在字符串里的代码,这就是一种立场。不要做互斥立场的争论,那毫无意义,只有当我们立场一致,争论才能带来思维的碰撞。

Unity3D热更新全书-脚本(一) 初识脚本的更多相关文章

  1. Unity3D热更新全书-PageZero

    由于深刻的认识到自己是个思维跳跃的人,深入浅出是个我还要努力很久的目标,为了让大家不至于在我乱七八糟的文字中迷失,特整理目录一份 无分类 <Unity3D热更新全书-何谓热更新,为何热更新,如何 ...

  2. Unity3D热更新全书-重头再来

    之前写了Unity3D热更新全书系列Blog 提出了下载.加载.脚本三个方面的开源类库 下载方面有EasyDown加载方面有GameObjParser脚本方面有C#Light另外有一个没有独立成库,但 ...

  3. Unity3D热更新全书FAQ

    只要有程序员朋友们问过两次的问题 就会收录在此FAQ中 1.C#Light对比LUA有什么好处 C#Light是静态类型脚本语言,语法同C#,Lua是动态类型脚本语言,这两种都有人喜欢. 我更喜欢静态 ...

  4. Unity3D热更新全书-何谓热更新,为何热更新,如何热更新

    首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律. 为何赞叹中文?因为这是一篇针对新手程序员的文字,是一节语文课. 然后来做一下说文解字,也就是 何谓热更新 热更新,每个程序员一听就 ...

  5. Unity3D热更新全书-脚本(五) NGUI

    让我们实际的研究一下如何将NGUI和C#LightEvil结合起来. 这里使用NGUI2.7,因为他是一个开源的版本,NGUI最新的版本未经作者的许可,是不可以带入我们的开源项目使用的. 这个例子完成 ...

  6. Unity3D热更新全书-脚本(二) 两级分化

    上篇明确了我们探讨的脚本是什么:是写在文本文件里面的代码,可以作为资源加载,取得字符串再执行. 可是为什么世界上会有那么多的脚本?而其使用方法完全看起来不一样呢?这是因为每种脚本都有自己的定位,在不同 ...

  7. Unity3d热更新全书-加载(一)从AssetBundle说起

    Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3 ...

  8. Unity3D热更新全书-下载 唯一的一篇

    下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...

  9. Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架

    C#LightEvil之前提供了很多和Unity结合的例子,都是采用把脚本文件放置在StreamingAssets中的方法. 这样可以利用Unity的特性,放在这个目录中的CS文件会被编译器编译,我们 ...

随机推荐

  1. iOS开发-automaticallyAdjustsScrollViewInsets属性

    iOS开发-automaticallyAdjustsScrollViewInsets属性 Available in iOS 7.0 and later. 简单点说就是automaticallyAdju ...

  2. IIS配置excel 权限

    http://www.cnblogs.com/zhuxiaohui/archive/2013/10/16/3371637.html

  3. Java使用Scanner接收中文并输出时出现乱码

    Java中使用Scanner接收输入的中文并输出时会出现乱码现象,怎么解决此问题呢? 1.方法一 在声明Scanner时添加对应的编码格式就可以了,如下所示: Scanner sc = new Sca ...

  4. Linux三剑客之grep 与 egrep

    grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep) sed:stream editor,文本编辑工具: awk:Lin ...

  5. javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. Asp.Net 利用反射获得委托和事件以及创建委托实例和添加事件处理程序

    子程序定义: public delegate void CurrentControlListenEvent(string uniqueID, string way = null); public ev ...

  7. 【九度OJ】题目1061:成绩排序

    题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息. 输入: 测试数据有多组,每组输入 ...

  8. eclipse 配色方案

    http://www.blogjava.net/kuuyee/archive/2013/02/26/395728.html

  9. Xcode自定义Eclipse中常用的快捷键

    转载自http://joeyio.com/2013/07/22/xcode_key_binding_like_eclipse/ Xcode自定义Eclipse中常用的快捷键 22 July 2013 ...

  10. C#将科大讯飞语音合成文件转换为MULAW音频格式

    任务描述:通过科大讯飞语音合成组件在线完成文本转语音的合成,然后再转换为电话系统IVR要求的音频格式: wave mu-law 16位 8kHZ 64kbps. 完成步骤: 首先,我们要先通过科大讯飞 ...