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

《王者荣耀》(以下简称“农药”),专注于移动端(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. NET中解决KafKa多线程发送多主题的问题

    一般在KafKa消费程序中消费可以设置多个主题,那在同一程序中需要向KafKa发送不同主题的消息,如异常需要发到异常主题,正常的发送到正常的主题,这时候就需要实例化多个主题,然后逐个发送. 在NET中 ...

  2. Github 开源:使用升讯威 Mapper( Sheng.Mapper)与 AutoMapper 互补,大幅提高开发效率!

    Github 地址:https://github.com/iccb1013/Sheng.Mapper 在上一篇幅中,简单介绍了 升讯威 Mapper( Sheng.Mapper)[http://www ...

  3. vue学习笔记(1)—— 组件化实现todoList

    一.环境搭建 1.npm 大型应用时推荐用npm安装,npm能很好的和webpack等模块打包器配合使用.具体安装步骤请参考网上的诸多教程.完成后使用如下命令安装vue. $ npm install ...

  4. java ArrayList 踩坑记录

    做编程的一个常识:不要在循环过程中删除元素本身(至少是我个人的原则).否则将发生不可预料的问题. 而最近,看到一个以前的同学写的一段代码就是在循环过程中删除元素,我很是纳闷啊.然后后来决定给他改掉.然 ...

  5. Java 脚本引擎

    脚本引擎,就是一个编程语言的解释器,它的功能是解释执行用户的程序文本,将它译成计算机能执行的机器代码,完成一系列的功能. Java脚本引擎简单地说就是指Java提供的一组兼容操作各种脚本语言的的API ...

  6. hibernate 根据数据库表反生成javaBean

  7. ELK5.0搭建部署

    ###关闭防火墙 service iptables stop ###定义vi=vim alias vi=vim vi ~/.bashrc alias vi='vim' yum -y install l ...

  8. IPV6与IPV4的区别

    IPv4协议的地址长度是32位,IPv6协议的地址长度是128位. 1.表示方式 IPv4地址表示为点分十进制格式,32位的地址分成4个8位分组,每个8位以十进制数显式,中间用点号分隔. 而IPv6采 ...

  9. 【Linux笔记(000) 】-- 系统启动过程

    一.   启动流程 BIOS --> MBR(Boot Code) --> 引导程序(GRUB) --> 加载内核 --> 执行Init --> runlevel 二.  ...

  10. 【HotSpot】 jps

    jps(1) General Commands Manual jps(1) Name jps - Java Virtual Machine Process Status Tool SYNOPSIS j ...