当前位置:首页 > 每日看点

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

卡卷网2年前 (2025-01-07)每日看点256

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

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

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

一.实体属性模块

第一个部分是战斗实体本身是一个实体,这样可以给它定义实体相关的属性,如血量,蓝量,能量,怒气,力量,敏捷,等等,所有实体都拥有这些属性枚举(不过不是所有实体都一定有这些属性,当没有这项属性的时候以获取到为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

分享给朋友:

相关文章

你是如何在不依靠工资收入的情况下赚到一万元的?

你是如何在不依靠工资收入的情况下赚到一万元的?

分享几个路子稳,门槛低,变现快,适合年轻人的靠谱的副业。绝对不是送外卖、滴滴、搬砖等等的苦力活,这几个副业都是能是性价比极高,还能让你快速成长的工作。 想通过副业实现暴富、立马月入过万的同学,建议速速划走。 今天撇哥就给大家分享 100+个…

你每天用来涨知识的手机应用程序有哪些?

你每天用来涨知识的手机应用程序有哪些?

经过深度使用和测评, 从100个APP中选出的这35个超实用的app,每一个都是最硬核最有料的涨知识神器!每天打开看看,能让你提神醒脑,眼界大开,成为朋友聚会上的话题王者! 先放上全部APP目录,有新闻资讯类、英语学习类、读书类、影视类…

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

台积电通知其中国客户,从下周开始,所有 7nm 及以下芯片出货将停止。如何看待这一行为?

我说美国快要没招了,你信么? 这次台积电宣布停止向中国大陆客户供应7纳米及更先进AI芯片,再加上前段时间台积电对华为的制裁,我们基本可以认为,台积电在高端芯片领域,已经彻底把大陆给拉黑了,这也意味着中美芯片战已经到了最关键的时刻,一旦我们克…

为什么闲鱼越做越差?

理想的闲鱼:卖家视角:4000块钱买的手机,用了半年不想用了,挂一个3000块,和买家一顿交流,最后2500块成交,我得到了回血,买家得到了便宜; 买家视角:想用一台4000块的手机,但是手里只有2500块,来到闲鱼和卖家一顿交流,最后25…

怎样使自己处于高能量状态?

1、 不要习惯性的回顾过去那些让你尴尬和犯了错误的事情,不要嫌弃自己蠢。 学会原谅自己,当你不断回忆那些错误和囧事的时候,告诉自己:自己确实做错了,下次不要再犯即可,不需一遍遍的回忆。 这件事情已经发生,不要再一遍遍的折磨自己,不断回忆一点…

本专业是电气的,请问入门plc 必须要从电工接线开始吗,我怕被公司骗了,想请教各位?

本专业是电气的,请问入门plc 必须要从电工接线开始吗,我怕被公司骗了,想请教各位?

开关接线图 PART 01一开单控开关接线图 二三开连体单控开关接线图 四开连体单控开关接线图 一开五孔单控插座接线图 二开五孔单控插座接线图 一开双控开关接线图 二三开单控开关接线图 四开单控开关接线图 一…

发表评论

访客

看不清,换一张

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