王者荣耀是怎样炼成的(一)《王者荣耀》用什么开发,游戏入门,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,一经查实,立即删除!

相关文章

Java数组,字符串

数组定义 数据类型 名称[] new 数据类型[n] int data[] new int[3];data[0] 10;data[1] 11;data[2] 25;一步定义数组,并循环输出 int data[] new int[] {1,2,3,4};for (int i : data) {System.out.println(i);}字符串数组定义,并循环 String d…

新工作感悟~辞旧迎新~

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

POJ1845-Sumdiv【逆元,等比数列,约数】

正题 题目链接:http://poj.org/problem?id1845 题目大意 求ABAB次方的约数和。答案mod 9901mod9901解题思路 AA的约数和就是 (1+p1+p12+p13...+p1c1)+(1+p2+p22+p23...+p2c2)+...(1+pn+pn2+pn3...+pncn)" role="presentation">(1+p1+p21+p31...+pc11)+(…

关于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是…

糊涂工具类(hutool)post请求设置body参数为json数据

大家好,我是雄雄,欢迎关注微信公众号雄雄的小课堂 今天介绍一个案例,糊涂工具类(hutool)post请求设置body参数为json数据,刚开始写的总是报错,下面是正确的代码: /*** 添加动作* pa…

Failed to execute

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

P1313-计算系数【组合数,二项式定理】

正题 评测链接:https://www.luogu.org/recordnew/lists?uid52918&pidP1313 题目大意 求(axby)k(axby)k,求多项式展开后xnymxnym项的系数,答案mod 10007mod10007。 解题思路 二项式定理 (axby)k∑i0kCikaibk−ixiyi(axby)k∑i0kCkiaibk−ixiyix…

web.xml 组件加载顺序

转载自 web.xml 组件加载顺序 在配置项目组件的过程中, 了解Tomcat加载组件顺序很有必要。 例如某些框架如Quartz的集群功能需要数据库的支持, 数据库的加载肯定要在框架组件加载之前。 经过查阅和Debug发现, web.xml组件加载顺序为&#…

日期工具类处理总结(全)

文章目录前言代码展示前言 最近项目中用到了一些关于日期类和字符串类的处理,用到一次就得去写一次,后来想了想这样不光效率低还浪费时间浪费精力,于是就将常用的一些方法提取成工具类,每个项目都考进去一次,用的时候…

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

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

P3811-[模板]乘法逆元【线性求逆元】

正题 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP3811 题目大意 求1∼n1\sim n1∼n中modpmod\ \ pmod p的逆元。 解题思路 首先对于p,我们将其分解为kir(k⌊pi⌋,rp%r)kir(k\lfloor \frac{p}{i}\rfloor,rp\%r)kir(k⌊ip​⌋,rp%r)&…

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>…

nssl1141,jzoj3470-最短路【SPFA,暴力】

正题 纪中题目链接:https://jzoj.net/senior/#main/show/3470 题目大意 在从起点经过k个标记点然后到终点的最短路。 解题思路 用SPFA求出起点和所有标记点的最短路&#xff0c;然后暴力枚举标记点到达顺序。 时间负责度:O(K(NM)k!)O(K(NM)k!)O(K(NM)k!) code #include<…

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

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

Java进阶学习路线

1、JVM &#xff08;1&#xff09;启动参数 1)heap -Xms<size> -Xmx<size> a.young and old generation -Xmn<size> -XX:NewSize<size> -XX:MaxNewSize<size> -XX:NewRatio<rate> -XX:SurvivorRatio<rate> -XX:MaxTenuri…

nssl1142,jzoj3487-剑与魔法【堆,贪心】

正题 纪中题目链接:https://jzoj.net/senior/#main/show/3487 题目大意 有两个东西 一个是表示可以选择这个东西&#xff0c;然后加x的价值。 一个是在这个操作之前不可以超过x个东西。 求最大价值 解题思路 我们考虑每个不能超过的操作&#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;本质上…