当前位置:首页 > 每日看点 > 正文内容

用Unity做游戏,所有小兵怪兽单位共用一个脚本写好还是每个单位用不同的脚本?

卡卷网12个月前 (01-07)每日看点155

你这两种写法都是错误的,而且是大错特错。

我写游戏战斗逻辑这边相对较少,但是可以给你说一下游戏战斗实体这边的整体实现思路。

我们一般情况下会把一个战斗实体分成几个部分。

一.实体属性模块

第一个部分是战斗实体本身是一个实体,这样可以给它定义实体相关的属性,如血量,蓝量,能量,怒气,力量,敏捷,等等,所有实体都拥有这些属性枚举(不过不是所有实体都一定有这些属性,当没有这项属性的时候以获取到为0或者无效值的形式来实现就可以了)。

类似于

enumEntityPropMode{ emEntityPropNone=0,//未定义属性类型 emEntityPropHp=1,//生命值 emEntityPropMp=2,//法力值 emEntityPropAttack=3,//攻击力 //others. };

当我们获取这个实体的某项属性时,就直接通过一个GetEntityProp(EntityPropMode)这样的接口去获取属性,而不关注它的具体实体类型是什么(这里的实体类型有可能是Monster,Person,Pet,Tank等等不同类型,还会包含实体的阵营属性和是否可以攻击属性等等)

这里举几个较典型的Case:

(1)Monster

怪物是一种较普遍的实体单位,可以被玩家攻击,部分的Monster类型还可以相互攻击,这里就涉及到一个属性字段叫做阵营类型(CampType),以较经典的魔兽世界为例的情况下,通常我们会考虑将所有玩家的阵营类型设置为'部落'(1),'联盟'(2),'怪物'(3)。

假使说我们要设计出一些可以相互进行攻击的怪物该怎么处理呢,这个时候就要单划分出一个阵营类型如,'红怪物'(4),'亡灵怪物'(5),这样当他们发现某个单位与自己阵营不同时(或者是某个特定阵营时),就会对该阵营的单位发起攻击。

(2)Person

Person这里一般的常见理解是一种由玩家手动控制的Monster单位,当然这里要忽略一些的特殊养成,如背包,装备等等(我们一般考虑将装备等值为属性本身,就是当装备穿戴到玩家身上的时候,就直接给玩家这个实体添加属性,当然这里不是唯一实现)。

这样做的有一个好处是,如果我们要做自动战斗等等逻辑时,就可以将玩家直接作为一个Monster单位去处理,而不需要做太多的特殊处理去完成。

(3)Pet

Pet的特性是一般Pet的AI模式是由玩家决定,并且通常会跟随在玩家身边,虽然前文中有提到,但在这里进行明确叙述一下,决定游戏世界中,每个单位的行为不同的核心是游戏实体的AI,后文会明确叙述这一点,单从实体这个角度来说,Pet和Monster完全是一类单位。

(4)Collection

这里单说一下一类特殊的游戏实体,也就是采集物,我们可以考虑将魔兽世界中的矿石,药当作采集物,他们也是一类单的游戏实体,只不过和游戏实体相的是它们可能没有血量(部分游戏设计当中采集物也是有特殊血量的,也可以简单的讲魔兽世界中矿石理解为一个血量为3,不可以被攻击,当被挖矿的时候掉血的单位)。

这样的优势是当某一个矿石可以被特殊游戏单位攻击时,同样也不需要做特殊的代码逻辑就可以简单实现。

从上面的说法中可以明确的看出,所有的游戏单位都可以被定义为实体,区分他们的是属性不同(属性不同包含阵营类型,是否可以被攻击,是否可以交谈等等,这些都是组成属性的一部分)。

而当我们要设计一个怪物时(方说是像史莱姆这一类简单的怪物)就可以简单的定义为。

name="史莱姆"

prop_map[emapperence]=100024,//游戏模型

prop_map[emhp]=10,//生命

prop_map[emmp]=2,//法力

prop_map[emattack]=3,//攻击力

prop_map[emdefence]=1,//防御力

任何一个实体单位都可以被描述成一个这样的属性。

这里需要单拿出来说明的是,一个这样的属性是不包含攻击,被攻击这些东西的,这些我稍后具体论述是如何实现的。

二.技能模块

现在的RPG游戏通常都是有技能这一部分的,技能的这一部分的主要核心在于。

<>将技能进行抽象,把他们的共同点抽象出来作为一个可配置项。

技能对于整个游戏而言是一个非常复杂的,而且对于不同游戏而言可复用性可以说极差,一般会单为了这个游戏去设计和修改,这里单举几个简单的例子。

冰霜箭:施法时间2.5秒,冷却时间2秒,对目标造成100冰霜魔法伤害。

火球术:施法时间3.5秒,冷却时间3秒,对目标造成200火焰魔法伤害。

冰雨:引导8秒,每2秒对圆形区域内的敌人造成100冰霜魔法伤害。

对于如上几个技能进行抽象,我们就能得出来几个内容。

(1)施法时间。

(2)冷却时间。

(3)基础技能伤害。

(4)单体类型/圆形类型。

(5)施法法术/引导法术。

(6)伤害间隔。

就需要对于上面这些内容进行实现,而后面策划再去配置的时候就可以用已有的因素组合出。

火球爆发:施法时间3秒,冷却时间4秒,对目标圆形区域内造成1000火焰伤害。

所有的技能都是基于这些抽象上建立的特殊属性,具体的技能设计可以去找网上现成的配置,或者自己根据自己想要开发的技能进行抽象。

这一部分往往还包含了,UFF,效果这些特殊模块。

有了技能我们就可以设计出一个带技能的怪物,不过它仍然是不可以攻击的。

三.AI模块

AI是游戏实体的大脑,这一部分决策了游戏实体可以自己去做哪些事情,一般的AI实现会考虑使用决策树或者状态机,我个人使用决策树的方案会相对多一些(因为它相对来说好实现,理解和开发,但是在一些特殊情况下没有状态机灵活)。

这里以一只可以使用火焰法术,可以普通攻击,可以使用治疗法术的史莱姆为例,它的AI决策应该是这个样子的。

(1)如果血量在20%以下,逃离玩家。

(2)如果血量在50%以下,蓝量足够的情况下,使用治疗法术。

(3)蓝量足够的情况下,使用火球术。

(4)使用近战攻击。

这是一个简单的AI,不过考虑我们不可能的为每一只小怪单去写一个AI(某些副本怪物是需要单编写AI逻辑的),所以这里就需要一个通用AI。

(1)如果血量在20%以下,逃离玩家。

(2)如果血量在50%以下,蓝量足够的情况下,有治疗类型法术的情况下,使用治疗法术。

(3)蓝量足够的情况下,选择一个随机伤害型法术。

(4)使用近战攻击。

然后就可以用这个通用AI去做大部分怪物的大脑。

最后我们的一个怪物应该就需要以下配置就可以配置出来、

怪物表

史莱姆,100血,10蓝,5攻,1防,技能1火球术,技能2治疗术,通用AI类型,史莱姆怪物模型。

扫描二维码推送至手机访问。

版权声明:本文由卡卷网发布,如需转载请注明出处。

本文链接:https://www.kajuan.net/ttnews/2025/01/7030.html

分享给朋友:

相关文章

互联网算命,是不是个好生意?能不能赚钱?

互联网算命,是不是个好生意?能不能赚钱?

现在的年轻人也开始“迷信”了。疫情、降薪、失业、内卷……2020年或许是这届年轻人最为困难的一年,无尽的焦虑与压力之下,他们陷入了失落与迷茫之中,失去了未来的方向。如果此时有人能够为你指引出未来的道路,你是会...

从玄学到网红 互联网企业取名有何学问

从玄学到网红 互联网企业取名有何学问

12月1日,B站发布年度弹幕,第一是“爷青回”,转到天眼查APP查找发现,“爷青回”商标已经被申请注册。此外,“爷青结”同样也已经被多家公司申请注册商标,今年B站的年度弹幕前五中“有内味了”商标也有公司申请注...

开发了个小程序,咋推广呢?

要是开发了个小程序,想推广的话,可以先从自己的朋友圈子下手,让亲戚朋友都帮忙转发宣传,这样能先有点人气。然后去一些跟你的小程序相关的论坛、社区啥的,发帖子介绍介绍,吸引有兴趣的人。还能找些网红、博主合作,要是他们觉得你的小程序不错,帮忙推荐...

抖音和快手最大的区别是什么?

1、目标人群定位不同抖音:一二线城市,占比52%,大专学历以上,女性偏多。抖音以年轻群体居多。快手:三四线城市,占比64%,高中学历以下,男女更均衡。快手所覆盖的年龄段范围更广。2、内容创作的形式和深度不同抖音:偏深层,内容的装饰及表达更高...

苹果为什么不做千元机?

苹果为什么不做千元机?

第一步,打开苹果官网,注意是.com,不是.cn;第二步,点击iPhone,选择Compare iPhone;第三步,选择最新iPhone 15系列,查看起售价格,分别为$1199,$999,$799。这不妥妥的千元机吗,怎么苹果就不做千元...

你捡过最大的漏是什么?

你捡过最大的漏是什么?

买了套二手房,软磨硬泡便宜了1个w 结果就是一屋子狼藉 原业主说反正你们要重新装修 就不收拾了 等完了你们一起收拾掉吧 落了很多柜子 电器是啥的 今天打开卧室柜子一看…现在是去存钱的路上有朋友知道这样存钱银行会给发大米跟油吗...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。