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

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

 

《王者荣耀》(以下简称“农药”),专注于移动端(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,今天就先到这里。

原文地址:http://www.cnblogs.com/yuxiuyan/p/7533392.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新工作感悟~辞旧迎新~

“大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂”现在是:2022年6月21日22:33:34公众号又好久没有更新啦。从以前的日更,到后来的周更,再到后来的月更……不知道会不会到不更的结局。。。最近换工作了&…

关于Spring底层原理面试的那些问题,你是不是真的懂Spring?

转载自 关于Spring底层原理面试的那些问题,你是不是真的懂Spring? 1.什么是 Spring 框架?Spring 框架有哪些主要模块? Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。Spring帮助开发者解…

ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

1.1. 名词解释 内核态: CPU可以访问内存所有数据, 包括外围设备, 例如硬盘, 网卡. CPU也可以将自己从一个程序切换到另一个程序。 用户态: 只能受限的访问内存, 且不允许访问外围设备. 占用CPU的能力被剥夺, CPU资源可以被其他程序获取。 1.2. Kestrel基本工作原理 Kestrel是…

Failed to execute

今天用dev c无论打编译什么都是出现如下结果: 后来终于找到解决办法了: 原来是这里出现问题了,我的电脑是32位的,必须也是32位的编译系统。否则不管输入什么都是上面的结果; 所以以后不管下载软件还是编译东西第一步一定要看自…

asp.net core 2.0 web api基于JWT自定义策略授权

JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端验证通过即可能获取想要访问的资源。关于JWT的技术,…

BATJ面试必会|Jvm 虚拟机篇

转载自 BATJ面试必会|Jvm 虚拟机篇 目录 一、运行时数据区域 程序计数器 Java 虚拟机栈 本地方法栈 堆 方法区 运行时常量池 直接内存 二、垃圾收集 判断一个对象是否可被回收 引用类型 垃圾收集算法 垃圾收集器 三、内存分配与回收策略 Minor GC 和 Full GC 内存…

让网页背景颜色改变

如何改变背景的颜色呢&#xff0c;这里提供一个方法 <!DOCTYPE html> <html><head><style type"text/css">body {background-color: red}p {margin-left: 1px}</style><title>我yi癫狂</title></head><body>…

糊涂工具类真是场景下请求http接口的案例

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年7月7日13:46:07 前言 今天有个这样的需求&#xff0c;PC端需要查看一下哪些天有数据&#xff0c;但是哪些有有没有数据我这边还看不出来&#xff0c;得请求别的系…

体验 ASP.NET Core 中的多语言支持(Localization)

首先在 Startup 的 ConfigureServices 中添加 AddLocalization 与 AddViewLocalization 以及配置 RequestLocalizationOptions &#xff08;这里假设使用英文与中文&#xff09;&#xff1a; public void ConfigureServices(IServiceCollection services) { services.AddLoca…

java中复杂业务情况下的集合操作(增减集合同步数据)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年7月5日16:14:28 前言 今天分享个案例&#xff0c;需求是这样的&#xff1a;一个团组中是可以包含多个会员&#xff0c;在给团组创建训练方案时&#xff0c;本质上…

springboot整合spring @Cache和Redis

转载自 springboot整合spring Cache和Redis spring基于注解的缓存 对于缓存声明&#xff0c;spring的缓存提供了一组java注解: Cacheable:触发缓存写入。CacheEvict:触发缓存清除。CachePut:更新缓存(不会影响到方法的运行)。Caching:重新组合要应用于方法的多个缓存操作。…

段落分开

分三段 <!DOCTYPE html> <html><head></head><body><p>This is a paragraph.</p> <p>This is another paragraph.</p> <p>这是网页设计中定义段落的标记&#xff0c;称为开始标记&#xff0c;称为结束标记。把一…

辞旧迎新,新工作感悟!

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 现在是&#xff1a;2022年6月21日22:33:34 公众号又好久没有更新啦。从以前的日更&#xff0c;到后来的周更&#xff0c;再到后来的月更……不知道会不会到不更的结局。。。 最近换工作了…

ASPNET Core 2.x中的Kestrel服务器

Kestrel是一个基于libuv的跨平台ASP.NET Core web服务器&#xff0c;libuv是一个跨平台的异步I/O库。ASP.NET Core模板项目使用Kestrel作为默认的web服务器。 Kestrel支持以下功能&#xff1a; HTTPS用于启用不透明升级的WebSockets位于Nginx之后的高性能Unix sockets Kestr…

全文搜索!收藏这篇Solr ElasticSearch 长文就可以搞定

转载自 全文搜索&#xff01;收藏这篇Solr ElasticSearch 长文就可以搞定 摘自&#xff1a;JaJian博кē Java后端技术编者说&#xff1a;文章从浅到深&#xff0c;描述了什么是全文搜索&#xff0c;为什么要使用全文搜索&#xff0c;Solr和ElasticSearch的发展和比较。文章比…

网页弹框弹出

完成这个功能需要在 弹框弹出 点击之后 才会显示内容 <!DOCTYPE html> <html><head><title>对话框测试</title><script>alert("对话框测试");</script></head><body>对话框测试&#xff1a;</body> …

Azure School与开源

距离Azure School(https://school.azure.cn/) 的正式上线时间&#xff0c;2017.8.3&#xff0c;已经过去了20多天了。这20多天得到了很多有帮助的建议和反馈&#xff0c;小伙伴们都很给力&#xff0c;互相帮助扶持&#xff0c;调整产品不正确的地方&#xff0c;快速迭代新的功能…

select count(*)底层究竟干了啥么?

转载自 select count(*)底层究竟干了啥么&#xff1f; “SELECT COUNT( * ) FROM t” 是个再常见不过的 SQL 需求了。在 MySQL 的使用规范中&#xff0c;我们一般使用事务引擎 InnoDB 作为(一般业务)表的存储引擎&#xff0c;在此前提下&#xff0c;COUNT( * )操作的时间复杂…

为什么不应该重写service方法

转载自 为什么不应该重写service方法 故事通常是这样开始的&#xff1a; 从前&#xff0c;有一个程序猿&#xff0c;他语重心长地对孙子说&#xff1a;“孩子&#xff0c;要是你以后写servlet&#xff0c;最好不要重写service方法啊” 孙子大为不解&#xff0c;程序猿又说&…

.net core之ACG小站爬虫(二)

紧跟着上一节说的文章&#xff0c;虽然已经放出了所写的全代码&#xff0c;但还是再解释一下另外一个页面的请求和分析过程吧。PS&#xff1a;又可以愉快的水一章了&#xff0c;咕嘿嘿。页面分析上回说到下载按钮的href属性是javascript:;伪协议&#xff0c;导致了新打开的页面…