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

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

卡卷网1年前 (2025-01-07)每日看点245

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

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

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

一.实体属性模块

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

分享给朋友:

相关文章

逾期后支付宝微信被冻结,显示执保该怎么办?

这几天有朋友问我说,他的微信零钱突然的用不了,问我是不是被冻结了,问我该怎么办?是不是被起诉了?这个,那个,别慌,别慌,还是那句老话:有钱就去协商,没钱只能暂时不管!但是真不管,这个被冻结的微信怎么办呢?今天针对这个问题,我就给大家做一哥比…

内存和硬盘的单位都是G,两者的功能是什么?谁能用简单通俗的方式来解读一下?

内存和硬盘的单位都是G,两者的功能是什么?谁能用简单通俗的方式来解读一下?

要弄清楚这个问题,首先要弄清楚什么是内存,什么是硬盘,在计算机的组成结构中有一个很重要的部分是存储器。它是用来存储程序和数据的部件。对于计算机来说,有了存储器,才有记忆功能,,才能保证正常工作。存储器的种类很多。按其用途可分为主存储器与辅助…

大量刷短视频,会让大脑变笨拙吗?

会。 我曾经是一名高三学生,亲身实践过。 当时集中突破语文,每天都在刷语文卷。然后有一天想躺一下刷手机,结果短视频刷完了,我再去看哪些文章,只觉头晕眼花,难以理解文字。不过好在这种情况是短时间的,过了一天我的能力又恢复了。 在我看来,长期刷…

如何看待台积电,三星相继停供大陆7nm及更先进芯片?

在这个事出来之前,我就看到过一个说法,两家Foundry可以在中东建厂,让中东的Fab去干“脏活”。本质上是国内企业搞几个中东的代理人,装作是中东的初创Fabless企业去下单,人家Foundry大概率睁一只眼闭一只眼,只管数钱。然而,紧接…

腾讯云为何在云服务市场败给了阿里云?

IDC领域,2010年以前,万网、新网互联、新网,三家公司瓜分天下,其中万网市场份额最高,排名第一。当时,万网的域名是 http://www.net.cn ,通过该域名就可以判断万网的地位。2010年阿里云成立,直接收购了万网,大量用户直接…

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

抖音小店三个月了一单没出,也没有流量,一个星期好像都没有一个点击,怎么办?

好消息,你有毅力上200多个品,还能坚持三个月 坏消息,一单没出 我感觉你还是别碰抖店了,甚至电商平台都别碰 你没这个缘分 我要是这样,我得用一百辆叉车叉死我自己 你如果还想坚持,我直接给你这套至少价值19800学来的新思路 简单来说就是…

发表评论

访客

看不清,换一张

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