开篇之前还是要先说明,这是一份给经验并不丰富的程序员阅读的文字。
有需求、有疑惑,往下看。
第一个问题什么是脚本?程序和脚本如何区分?我们给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热更新全书-脚本(一) 初识脚本的更多相关文章
-
Unity3D热更新全书-PageZero
由于深刻的认识到自己是个思维跳跃的人,深入浅出是个我还要努力很久的目标,为了让大家不至于在我乱七八糟的文字中迷失,特整理目录一份 无分类 <Unity3D热更新全书-何谓热更新,为何热更新,如何 ...
-
Unity3D热更新全书-重头再来
之前写了Unity3D热更新全书系列Blog 提出了下载.加载.脚本三个方面的开源类库 下载方面有EasyDown加载方面有GameObjParser脚本方面有C#Light另外有一个没有独立成库,但 ...
-
Unity3D热更新全书FAQ
只要有程序员朋友们问过两次的问题 就会收录在此FAQ中 1.C#Light对比LUA有什么好处 C#Light是静态类型脚本语言,语法同C#,Lua是动态类型脚本语言,这两种都有人喜欢. 我更喜欢静态 ...
-
Unity3D热更新全书-何谓热更新,为何热更新,如何热更新
首先来赞叹一下中文,何谓为何如何,写完才发现这三个词是如此的有规律. 为何赞叹中文?因为这是一篇针对新手程序员的文字,是一节语文课. 然后来做一下说文解字,也就是 何谓热更新 热更新,每个程序员一听就 ...
-
Unity3D热更新全书-脚本(五) NGUI
让我们实际的研究一下如何将NGUI和C#LightEvil结合起来. 这里使用NGUI2.7,因为他是一个开源的版本,NGUI最新的版本未经作者的许可,是不可以带入我们的开源项目使用的. 这个例子完成 ...
-
Unity3D热更新全书-脚本(二) 两级分化
上篇明确了我们探讨的脚本是什么:是写在文本文件里面的代码,可以作为资源加载,取得字符串再执行. 可是为什么世界上会有那么多的脚本?而其使用方法完全看起来不一样呢?这是因为每种脚本都有自己的定位,在不同 ...
-
Unity3d热更新全书-加载(一)从AssetBundle说起
Unity3D动态下载资源,有没有解?有,AssetBundle就是通用解,任何一本书都会花大幅篇章来介绍AssetBundle. 我们也来说说AssetBundle 我们试全面的分析一下Unity3 ...
-
Unity3D热更新全书-下载 唯一的一篇
下载在这个时代实在是太平常了,每个人都深刻的理解着下载到底是什么. 这一篇文字只是把下载的代码分享并介绍,而已. 首先,下载系统担负着几个使命. 第一.是保持客户端版本库的最新. 第二.是下载要能够比 ...
-
Unity3D热更新全书-脚本(四) 用C#LightEvil搭建实际开发使用的脚本框架
C#LightEvil之前提供了很多和Unity结合的例子,都是采用把脚本文件放置在StreamingAssets中的方法. 这样可以利用Unity的特性,放在这个目录中的CS文件会被编译器编译,我们 ...
随机推荐
-
Linux 命令备忘录(CentOS 7)
创建目录testdir: mkdir testdir 进入目录testdir:cd testdir 在testdir中创建空文件 1: touch 1 在testdir中创建空文件 2: t ...
-
noip复习模板
我只会这么多 tarjan:codevs 1332 void tarjan(int u) { dfn[u]=low[u]=Time++; s.push(u); for(int i=head[u];~i ...
-
phpmyadmin #1045 #2002 无法登录 MySQL 服务器的解决方
1.首先说下phpmyadmin的安装 a.解压放到网站的某个目录下,如mydbb.将config.sample.inc.php复制成config.inc.php 2.#2002 无法登录 MySQL ...
-
【Todo】【转载】深度学习&;神经网络 科普及八卦 学习笔记 &; GPU &; SIMD
上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...
-
【boost】使用装饰者模式改造boost::thread_group
在项目中使用boost::thread_group的时候遇到几个问题: 1.thread_group不提供删除全部thread列表的方法,一直使用create会是其内部列表不断增加. 2.thread ...
-
JSP Ajax
html代码: <!DOCTYPE html> <html> <script> function display() { var div=document.getE ...
-
flex4 一些项目使用的技术
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
-
mysql子查询慢的问题
当你在用explain工具查看sql语句的运行计划时.若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了.你已经掉入了mysql子查询慢 ...
-
C++ STL 优先队列详解
一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...
-
介绍一种很棒的wince 如何替换系统声音的方法
Topic:介绍一种很棒的wince 如何替换系统声音的方法(作者:Baiduluckyboy) //------------------------------------------------- ...