Unity3D热更新全书-脚本(一) 初识脚本
开篇之前还是要先说明,这是一份给经验并不丰富的程序员阅读的文字。
有需求、有疑惑,往下看。
第一个问题什么是脚本?程序和脚本如何区分?我们给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文件会被编译器编译,我们 ...
随机推荐
- springMVC 相对于 Structs 的优势
智者说,没有经过自己的思考和估量,就不能接受别人的东西.资料只能是一个参考,至于是否正确,还得自己去分辨 SpringMVC相对于Structs的几个优势: 1.springMVC安全性更高,stru ...
- Ubuntu16.04下安装.NET Core
以下为控制台输入代码序列一.sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet ...
- 深入研究C语言 第二篇(续)
1. 关于如下的程序,关于结构体的拷贝,拷贝是拷贝到内存中的什么地方? 我们进入debug进行反汇编,单步等操作跟踪查看.发现: 在main中,我们看到call 0266应该对应的是转跳到func处执 ...
- 删除从第i个位置开始,长度为len的子串
/*字符串采用带头结点的链表存储,设计算法函数void delstring(linkstring s, int i,int len)在字符串s中删除从第i个位置开始,长度为len的子串.*//**** ...
- enum类型学习笔记
如:enum color {red,white,yellow,green} 枚举出一种类型中的多个变量 enum本质为int,可以作为int使用: enum默认值为0,1,2... 以上的定义中: e ...
- Matlab 语谱图(时频图)绘制与分析
Matlab 语谱图(时频图)绘制与分析 语谱图:先将语音信号作傅里叶变换,然后以横轴为时间,纵轴为频率,用颜色表示幅值即可绘制出语谱图.在一幅图中表示信号的频率.幅度随时间的变化,故也称" ...
- 页面超慢,zabbix却没报警
故障背景:网站页面打开速度非常慢 排查过程: 1.一开始用vmstat 看到procs下的r值稳定在5.6,由于这台服务器是12核24线程,并且cpu的wa很大,说明系统很轻松, 肯定不会报警了,那为 ...
- 核心动画 (CAAnimationGroup)
Main.storyboard ViewController.m // // ViewController.m // 8A05.核心动画 CAAnimationGroup // // Creat ...
- ruby 学习笔记 2 -变量
变量 在ruby的世界里,变量有5种,全局变量 局部变量 实例变量 常量 类变量以及伪变量 常用的: 全局: 在全局使用,使用$开头,因为是全局的,所以在任何的代码例子中都可以改变其值,造成混乱,所以 ...
- Mini projects #5 ---- Memory
课程全名:An Introduction to Interactive Programming in Python,来自 Rice University 授课教授:Joe Warren, Scott ...