在国内,如果你没有听说过《王者荣耀》,那你一定是古董级的人物了。

《王者荣耀》(以下简称“农药”),专注于移动端(Android、IOS)的MOBA游戏。笔者看到这么火爆,就萌生了了解一下这类游戏的开发历程,顺便上手做一个类MOBA的Demo。

俗话说,不去瞎琢磨的程序员,不是好司机。

好的,直接进入正题。

一.农药用什么语言和软件开发

小伙伴看到农药运行在Android和IOS平台上,估计第一个想到的就是 java / kotlin 和 Object-C / swift 了。其实不然,原生游戏的开发是非常耗时耗力的,并且在一些细节问题上不容易处理。现在的大部分游戏都是利用“游戏引擎”来处理的。比较著名的游戏引擎如unity3D,在处理农药这种3D游戏时有着非常便利的管理和编码功能。unity在5.x版本后支持C#和JavaScript两种语言实现游戏中的脚本(在4.x还支持Boo)。据不完全统计,unity程序员大约80%都是用C#,所以这次笔者也是用C#(随大流,不挨揍,haha)。而且如果你有java或者C基础,那么C#使用起来还是相当舒服不坑爹的。在微软的大树下正在茁壮成长。

有的小伙伴可能会有疑问,为啥不用JavaScript呢?现在JavaScript这么火爆?

其实unity使用的JavaScript和我们做web开发使用的JavaScript非常不同,或者我们干脆分别称呼为unityScript和JavaScript也不为过。

这里在segmentfault的看到的一端:

  1. unity中的js与其说是js,不如说是Unity Script。unity中的js是会经过编译的,其性能和本地速度差不多。在官方教材《unity 4.x从入门到精通》中unity称C#,Boo,JS的性能是差不多的。
  2. unity中的js脚本是可以和C#脚本等值替换的,所以自然也有一大堆数据类型,对象继承等传统语言及OOP的概念。不过var speed = 5这么写也是可以的,因为编译器会自动理解成var speed:int = 5。但是其他数据类型比如GameObjectTransform就不行了,必须在声明变量时指定数据类型。
  3. 自然,很多标准js中的特性在unity中也不支持,比如高阶函数,闭包等。
  4. Unity3D中的Math对象叫做Mathf。
  5. Unity中的js可以直接调用Mono,C#封装的dll等。
  6. Unity中的调试语句用Debug.Log。
  7. 每行后面必须有分号。

总之,Unity中的js是会在运行前被编译成本地代码的。和标准js仅是写法比较相似,内在是完全不同的。比如js是非阻塞的,而unity中的js是阻塞的;js是动态语言,而unity中的js则是不折不扣的静态语言。

总之,使用unity + C#来进行开发。

二.游戏入门

关于游戏,有以下几个特点:

  1. 把游戏想象成一个动画片,它是一帧一帧播放的
  2. 它的逻辑是可以变化
  3. 你的程序控制它的画面

综合来看,游戏包括两大要素:逻辑、显示。

(一)什么是逻辑

简单来说,就是游戏是怎么控制的,玩法是什么样的。

  1. 游戏逻辑:游戏的玩法,用户的输入等。
  2. AI:NPC,自动寻路,追逐敌人等。
  3. 物理运算:碰撞,速度,加速度,重力等物理计算。

(二)什么是显示

顾名思义,显示就是把游戏的画面、内容展现给玩家。

  1. 动画系统:控制游戏动画的播放。
  2. 底层渲染:告诉硬件该怎么样把图像显示(渲染)出来。

用一幅图归纳:

三.游戏团队的角色

粗略可以分为三种角色:策划、美工、程序员。

  1. 策划:负责设计游戏的玩法。
  2. 美工:负责设计游戏的资源素材。
  3. 程序员:负责游戏的编码。

四.unity介绍

上面说过,原生开发游戏耗时耗力,想象一下,整个游戏从底层的渲染,一直到上层的动画声音,简直要了命。而且有一点。原生开发不利于组件的重用。

有些东西,在A游戏上可以用,在B游戏上也可以使用。那么我们为什么不把这些可以重用的部分提取出来,到时候再开发其他游戏的时候直接调用就可以了啊。

基于这么一种“偷懒”的思想,Duang~,游戏引擎就诞生了。

游戏引擎减少了重复开发,降低了技术门槛,对于那些游戏开发者简直是“神器”。现在优秀的游戏引擎有很多非常有用的模块。

ok,今天就先到这里。

王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,unity3D介绍的更多相关文章

  1. 王者荣耀是怎样炼成的(三)unity组件与脚本

    转载请注明出处:http://www.cnblogs.com/yuxiuyan/p/7565345.html 上回书说到了unity的基本操作.这回我们来侃侃unity中的组件与脚本. 目录结构 一. ...

  2. 王者荣耀是怎样炼成的(二)《王者荣耀》unity安装及使用的小白零基础入门

    转载请注明出处:http://www.cnblogs.com/yuxiuyan/p/7535345.html 工欲善其事,必先利其器. 上回书说到,开发游戏用到unity和C#.本篇博客将从零开始做一 ...

  3. fir.im Weekly - 论个人技术影响力是如何炼成的

    每个圈子都有一群能力强且懂得经营自己的人,技术圈也是如此.本期 fir.im Weekly 一如往期精选了一些实用的 iOS,Android 开发工具和源码分享,还有一些关于程序员的成长 Tips 和 ...

  4. 我的 Github 个人博客是怎样炼成的

    Joey's Blog 长大后才发现政府建造 GFW 真是太 TM 机智了,由于本人自制力较差,且不说 91porn, youporn 等两性知识网站的超强战斗力,单单一个Youtube就可以让我瞬间 ...

  5. 自由是有代价的:聊聊这几年尝试的道路 要想生活好,别看哲学书和思想书。简单看看可以,看多了问题就大了。还是要去研究研究些具体的问题。别jb坐在屋子里,嘴里念着海子的诗,脑袋里想康德想的事情,兜里屁都没有,幻想自己是大国总理,去想影帝是怎么炼成的。

    自由是有代价的:聊聊这几年尝试的道路 现在不愿意写过多的技术文章了,一点是现在做的技术比较偏,写出来看的人也不多,二来是家庭事务比较繁多,没以前那么有时间写了.最近,园子里多了一些写经历的文章,我也将 ...

  6. 2星|《10W+走心文案是怎样炼成的》:标题党。实际是台湾创意总监的一些人生感悟和两三个很一般的创意文案

    10W+走心文案是怎样炼成的 作者是台湾人,曾在台湾奥美担任创意总监,做过一些广告.本书是他的一些经验介绍. 总体来说是标题党,作者的广告基本是电视广告,跟文案也有关系,估计播放量也很容易过10W+, ...

  7. 测度论--长度是怎样炼成的[zz]

    http://www.58pic.com/newpic/27882296.html http://www.58pic.com/newpic/27893137.html http://699pic.co ...

  8. AI算法工程师炼成之路

    AI算法工程师炼成之路 面试题: l  自我介绍/项目介绍 l  类别不均衡如何处理 l  数据标准化有哪些方法/正则化如何实现/onehot原理 l  为什么XGB比GBDT好 l  数据清洗的方法 ...

  9. 老杜告诉你java小白到大神是怎么炼成的(转载)

    老杜告诉你java小白到大神是怎么炼成的 1. 学习前的准备 一个好的学习方法(应该怎么学习更高效): 一个合格的程序员应该具备两个能力 有一个很好的指法速度(敲代码快) 有一个很好的编程思想(编程思 ...

随机推荐

  1. vc类型转换函数大全

    windows c++中存在各种类型,在实际应用过程中也需要将类型互相转换,故整理了常用类型之间的转换并将之封装成函数,仅供参考,有什么不对的地方,还请指正!   ****************** ...

  2. javascript 用Activex方法调用数据库中的数据,只可用于IE

    // JavaScript source code //创建数据库连接对象 var conn = new ActiveXObject("ADODB.Connection"); // ...

  3. NYOJ--244--16进制的简单运算(C++控制输入输出)

    16进制的简单运算 时间限制:1000 ms  |  内存限制:65535 KB 难度:1   描述 现在给你一个16进制的加减法的表达式,要求用8进制输出表达式的结果.   输入 第一行输入一个正整 ...

  4. CronJobs

    一.概念     CronJobs提供了在特定的时间或者间隔内处理业务逻辑的方法.一般创建一个Cronjob有两种方式,第一种是定义Java类,由Hybris生成脚本并加入数据库.第二种是直接编写gr ...

  5. 【有意思的BUG】需要停止的进程

    用户操作的目的:将某网站的歌曲分享到朋友圈 用户遇到的问题:在朋友圈内,有2个入口可以播放该第三方的歌曲.但是这两个入口可以同时播放,音乐重叠了. 操作步骤: [1] 将歌曲分享到朋友圈 [2] 在朋 ...

  6. 填涂颜色 洛谷 p1162

    题目描述 由数字0 组成的方阵中,有一任意形状闭合圈,闭合圈由数字1构成,围圈时只走上下左右4个方向.现要求把闭合圈内的所有空间都填写成2.例如:6X6的方阵(n=6),涂色前和涂色后的方阵如下: 0 ...

  7. Android -- AsyncTask源码解析

    1,前段时间换工作的时候,关于AsyncTask源码这个点基本上大一点的公司都会问,所以今天就和大家一起来总结总结.本来早就想写这篇文章的,当时写<Android -- 从源码解析Handle+ ...

  8. 开源社交系统ThinkSNS+ 0.7.3研发周报

    什么是ThinkSNS+ ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+. 亲爱的粉丝,授权客户, ...

  9. ARP协议详解RARP

    简单来说,ARP协议是IP地址转换成MAC地址的协议.链路层协议.过程如下: 1:首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系. 2:当源主机要 ...

  10. C语言——指针

    一.什么是指针 "指针变量"是指用来存放变量地址的变量.指针变量也是一个变量,它和其他变量的区别在于它里面存的不是普通的数据,而是另一个变量的地址.访问变量有两种方式,第一种是直接 ...