基于 Unity3D 的 MOBA 游戏架构

来源:互联网 发布:明解c语言在线阅读 编辑:程序博客网 时间:2024/05/17 06:59

基本概念

游戏物体,是所有游戏中最重要的一个概念,所有出现在游戏中的物体,对玩家或者二次开发者可见的,就是游戏物体。

在魔兽争霸3的 Word Editor 的物体编辑器中可以看到有如下几种基本物体

  • 单位
  • 物品
  • 可破坏物
  • 技能
  • 魔法效果/特效
  • 升级

这里写图片描述

这些物体出现在单位的状态栏,建筑的升级栏,或者是商店的购买栏,或者是掉落在地上的物品。

可以看到这些都是组成游戏的基本元素,游戏内所有交互都是基于这些基本物体之间的。

而魔兽争霸3的 JASS 脚本以及 JASS 脚本封装一层后带有 GUI 的触发编辑器所进行的二次开发,都是基于暴雪所提供的魔兽争霸3的一些 API 。

这里写图片描述

在设计游戏的基本物体的时候,我们就需要考虑,这个物体是什么(IsA),这个物体有什么(HasA),这个物体能做什么(CanDo)。

同时我们要从这个物体给外界提供出接口,以方便外界组合出新功能。比如对某个物体提供了设置坐标的接口提供之后,便可以配合定时器做出冲锋,位移等效果。

设计物体

首先是IsA,开发游戏,大部分是需要选用面向对象语言的,比较符合游戏开发的需求。IsA是面向对象中重要的思想,IsA 决定了这个物体的基本属性。

举个例子:大法师是一个英雄,是一个单位。那么他就会继承所有单位的属性,同时,所有单位的操作也对大法师有效,比如杀死一个单位的操作,也是可以杀死一个大法师的。

这里写图片描述

其次是 HasA,HasA着重表示他拥有什么属性,IsA着重表示了他的父类是谁,那么HasA表示了他拥有了哪些属性。

大法师有名字,图标,攻击投射物,技能等属性,其中部分属性是从单位类继承而来。

当然在魔兽争霸3的世界编辑器中,这里的游戏物体显得比较扁平化

(可以看到在世界编辑器这里分类出来的游戏物体是非常特异化的,比如技能和单位,是几乎无法找到共同属性的,这也是为什么它俩要分开,但是在游戏引擎底层,应该会是属于同一个类,因为都要进行资源的读取,加载以及释放)

特异化

魔兽争霸3中的单位,大部分具有相同的属性,比如会有右边的操作栏,生命值,移动速度等等。而魔兽争霸3还分有:召唤物,建筑,普通单位,英雄等概念。

如果从编辑器这里的角度来看,魔兽争霸3做到特异化这些单位的方法,便是给属性设置不同的值。

从这里看起来很扁平化的原因便是如此。其实考虑到英雄可能是个召唤物,英雄也可能是个建筑这些概念的话,用属性控制特异化而不是用IsA来控制特异化是比较好的选择。因为现在支持虚继承,支持多重继承的面向对象语言不多了(其实有C++一个也就够了)

操作栏是魔兽争霸3中能够直接让玩家感受到不同的区域,英雄单位通过技能的不同组合,获得了特异的能力。

原创粉丝点击