Unity3D热更新全书-脚本(一) 初识脚本

时间:2022-09-24 21:02:52

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

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

第一个问题什么是脚本?程序和脚本如何区分?我们给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热更新全书-脚本&lpar;五&rpar; NGUI

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

  6. Unity3D热更新全书-脚本&lpar;二&rpar; 两级分化

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

  7. Unity3d热更新全书-加载&lpar;一&rpar;从AssetBundle说起

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

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

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

  9. Unity3D热更新全书-脚本&lpar;四&rpar; 用C&num;LightEvil搭建实际开发使用的脚本框架

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

随机推荐

  1. Linux 命令备忘录(CentOS 7)

    创建目录testdir: mkdir  testdir 进入目录testdir:cd testdir 在testdir中创建空文件 1:   touch 1 在testdir中创建空文件 2:   t ...

  2. noip复习模板

    我只会这么多 tarjan:codevs 1332 void tarjan(int u) { dfn[u]=low[u]=Time++; s.push(u); for(int i=head[u];~i ...

  3. phpmyadmin &num;1045 &num;2002 无法登录 MySQL 服务器的解决方

    1.首先说下phpmyadmin的安装 a.解压放到网站的某个目录下,如mydbb.将config.sample.inc.php复制成config.inc.php 2.#2002 无法登录 MySQL ...

  4. 【Todo】【转载】深度学习&amp&semi;神经网络 科普及八卦 学习笔记 &amp&semi; GPU &amp&semi; SIMD

    上一篇文章提到了数据挖掘.机器学习.深度学习的区别:http://www.cnblogs.com/charlesblc/p/6159355.html 深度学习具体的内容可以看这里: 参考了这篇文章:h ...

  5. 【boost】使用装饰者模式改造boost&colon;&colon;thread&lowbar;group

    在项目中使用boost::thread_group的时候遇到几个问题: 1.thread_group不提供删除全部thread列表的方法,一直使用create会是其内部列表不断增加. 2.thread ...

  6. JSP Ajax

    html代码: <!DOCTYPE html> <html> <script> function display() { var div=document.getE ...

  7. flex4 一些项目使用的技术

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  8. mysql子查询慢的问题

      当你在用explain工具查看sql语句的运行计划时.若select_type 字段中出现"DEPENDENT SUBQUERY"时,你要注意了.你已经掉入了mysql子查询慢 ...

  9. C&plus;&plus; STL 优先队列详解

    一.解释: 优先队列是队列的一种,不过它可以按照自定义的一种方式(数据的优先级)来对队列中的数据进行动态的排序,每次的push和pop操作,队列都会动态的调整,以达到我们预期的方式来存储. 例如,将元 ...

  10. 介绍一种很棒的wince 如何替换系统声音的方法

    Topic:介绍一种很棒的wince 如何替换系统声音的方法(作者:Baiduluckyboy) //------------------------------------------------- ...