最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

在Unity中制作完整的技能系統(tǒng)(介紹篇)

2022-05-15 16:20 作者:皮皮關(guān)做游戲  | 我要投稿

(本文作者 @酒九大魔王 )

大噶吼呀,還是我暴躁老哥酒九。

最近的我,遇到了游戲荒。

于是我就重新去玩《英雄聯(lián)盟》,結(jié)果發(fā)現(xiàn)自己還是一如既往的強(qiáng)(不是)。

對(duì)于這款游戲我就不用多做贅述了,它對(duì)我的影響是很大的,我雖然在中途有當(dāng)過一段時(shí)間的云玩家(S5,S6)不過也是從第一次公測(cè)就開始玩的,不知不覺它都走過十年了,還是相當(dāng)?shù)母锌?/p>

?

當(dāng)然,今天的主題肯定不是發(fā)表我對(duì)這款游戲的情感小作文(那樣的話我就出門右轉(zhuǎn)微博了)。

在《英雄聯(lián)盟》中每個(gè)英雄都有屬于自己的技能(大多是5個(gè),部分更多),在其他游戲、比如《暗黑破壞神》中,每一個(gè)職業(yè)也有屬于自己的技能樹,擁有多種技能。

那么如果在我們自己做的游戲中也需要多種技能,我們應(yīng)該怎么辦呢?

第一反應(yīng)可能是將每一個(gè)技能單獨(dú)制作一個(gè)腳本,將技能的數(shù)據(jù)、釋放方式、目標(biāo)選擇、釋放效果等都放在這個(gè)腳本中,寫好之后只需要調(diào)用就好了。

但是,隨著我們需要的技能越來越多,或者后期需要對(duì)技能進(jìn)行修改,這將是一個(gè)很繁瑣和復(fù)雜的過程。

那這個(gè)時(shí)候我們就可以通過細(xì)分技能中的各個(gè)模塊,將同樣的模塊進(jìn)行統(tǒng)一的管理,再將這些管理者組合起來。這些互相關(guān)聯(lián)的腳本合集,我們就把它稱為技能系統(tǒng)(Skill System)。


1. 系統(tǒng)結(jié)構(gòu)介紹

首先我們需要對(duì)技能中的部分進(jìn)行一個(gè)劃分。通過觀察,我們不難發(fā)現(xiàn),在多個(gè)技能中經(jīng)常有一些相同的內(nèi)容(以下的例子均來自于《英雄聯(lián)盟》):

火男被動(dòng)的燃燒一定時(shí)間持續(xù)傷害和提莫的E技能中毒一定時(shí)間持續(xù)傷害,效果是相同的吧。

女槍的R技能和男刀的W技能都是都扇形范圍內(nèi)的敵人進(jìn)行傷害(這里我們只看形狀)。

所以,這些可能會(huì)在不同技能中重復(fù)的部分我們就可以單獨(dú)提出來做好。

但是做好了之后,由誰來決定這個(gè)技能是什么效果、什么形狀呢?這里就需要將一系列的數(shù)據(jù)都放在一個(gè)技能數(shù)據(jù)中來,再將一個(gè)一個(gè)的技能數(shù)據(jù)放到玩家的技能管理器中統(tǒng)一進(jìn)行配置和管理。而不同技能之間也有近戰(zhàn)釋放,遠(yuǎn)程釋放等不同釋放方式,因此我們還需要一個(gè)控制相同釋放方式的技能釋放器。

到現(xiàn)在大體上我們就將一個(gè)簡(jiǎn)單技能系統(tǒng)的結(jié)構(gòu)給拆解出來了。

技能系統(tǒng)的各項(xiàng)組成

技能系統(tǒng)的各個(gè)模塊有了,那么玩家釋放一個(gè)技能的流程是怎么樣的呢?

換個(gè)說法就是這些模塊之間是怎么互相調(diào)用的?

每個(gè)玩家身上都有一個(gè)技能管理器,當(dāng)中存放好了玩家所有的技能。玩家要釋放技能時(shí),管理器會(huì)通過調(diào)用對(duì)應(yīng)技能釋放器來執(zhí)行技能數(shù)據(jù)中設(shè)置好的范圍選擇算法和效果算法(這里用到了釋放器配置工廠),選擇好規(guī)定范圍中的敵人后賦予效果。

主要流程

這個(gè)技能系統(tǒng)并不會(huì)用到行為樹或者TimeLine一類的工具,只是給大家一個(gè)對(duì)技能系統(tǒng)的初步認(rèn)識(shí)。但與此同時(shí),這個(gè)技能系統(tǒng)也有很好的擴(kuò)展性,而且所有與技能相關(guān)的內(nèi)容都是通過技能數(shù)據(jù)來獲取且實(shí)現(xiàn)的。

接下來就讓我們以火球技能為例子來一步一步使用這個(gè)系統(tǒng)。

范例1:制作火球技能

簡(jiǎn)單說就是:朝指定方向發(fā)射一枚自動(dòng)飛行的火球,攻擊到敵人之后造成傷害并消失。

第一步:將火球的預(yù)制體放入Resource文件夾下的SkillPrefab文件夾中去,將預(yù)制體重命名為FireBall(方便填寫數(shù)據(jù)),并將釋放技能時(shí)要播放的動(dòng)畫也放到玩家角色的Animator中,并重命名。

方便讀取
玩家角色Animator

第二步:在玩家操作的角色身上掛載好CharacterSkillManager腳本,該腳本就是負(fù)責(zé)角色所有技能數(shù)據(jù)存儲(chǔ)、技能初始化、釋放技能等。在該腳本中存在一個(gè)技能數(shù)據(jù)列表,接下來我們就在這填寫我們的數(shù)據(jù)。

火球技能數(shù)據(jù)

填寫之前讓我們進(jìn)一步想想火球技能的具體表現(xiàn)形式:

從玩家角色處朝前方發(fā)射一枚自動(dòng)飛行的火球,玩家消耗法力值,火球飛行一段距離后自動(dòng)銷毀,如果在飛行過程中碰到了敵人也自動(dòng)銷毀對(duì)敵人造成傷害。

是不是差不多了?

知道這些后來填寫數(shù)據(jù)吧。

  1. ID,Name,Description,CD,CostMp,其中ID不能出現(xiàn)重復(fù)。

  2. Attack Distance不是我們理解的施法距離(飛行距離),而是火球發(fā)射后,以火球?yàn)橹行?、判斷是否碰到敵人的距離。同理Attack Angle也是一樣的,火球所有角度都可以檢測(cè)敵人,因此填寫值為360。

  3. Attack Target Tags也就是技能攻擊的目標(biāo)上的標(biāo)簽(Tag),這里我們填寫敵人的便簽Enemy。

  4. Impact Type是技能中會(huì)進(jìn)行的執(zhí)行效果的算法名字,根據(jù)算法的名字來找到對(duì)應(yīng)算法并在特定條件下執(zhí)行。這里就填寫上CostMp(扣除玩家法力值),Damage(對(duì)敵人造成傷害)。

  5. Next BatterId是用于進(jìn)行技能之間的連擊的,暫時(shí)用不到。

  6. Attack Num是傷害值(非傷害技能也可以是回復(fù)值,護(hù)盾值),Duration Time是技能持續(xù)時(shí)間,Attack Interval是間隔時(shí)間(用于持續(xù)攻擊,持續(xù)回復(fù),定時(shí)查找敵人等)。

  7. Prefab Name技能預(yù)制體名字,通過名字加載預(yù)制體,所以我們填上上一步準(zhǔn)備的預(yù)制體名。Animation Name通過動(dòng)畫名字播放動(dòng)畫,填好上一步的動(dòng)畫名。Hit Fx Name是特效的名字,這里也暫時(shí)用不到。

  8. Level技能等級(jí)(默認(rèn)為0)。Attack Type是技能的作用是單體傷害還是AOE傷害,火球只會(huì)攻擊第一個(gè)接觸他的敵人,所以選擇Single就萬事OK啦。

  9. Selector Type是技能可檢測(cè)對(duì)象的范圍算法名,根據(jù)這里的類別名稱生成對(duì)應(yīng)的算法檢測(cè)敵人。這里就選擇Sector類別??赡艽蠹視?huì)有疑問,火球不是一圈的敵人都可以攻擊嗎?其實(shí)360度的扇形不就是圓嘛,所以這里是可以通用的。

  10. Skill Indicator是技能指示器的名字,Skill Icon Name是技能圖標(biāo)名(暫時(shí)用不上)。

  11. Disappear Type是技能消失的方式:檢測(cè)到敵人就消失or持續(xù)時(shí)間到了消失。由于火球是攻擊到敵人以后就消失,所以我們這里選擇CheckOver。

第三步:編寫技能需要調(diào)用的效果算法和指定范圍目標(biāo)選擇算法。

部分效果算法
部分目標(biāo)選擇算法

第四步:給技能預(yù)制體掛載對(duì)應(yīng)的技能釋放器腳本。火球技能是遠(yuǎn)程釋放的,所以這里我們掛載上RemoteSkillDeployer腳本。在釋放器的作用就是找到并調(diào)用效果算法和目標(biāo)選擇算法。

第五步:給玩家編寫一個(gè)控制腳本,負(fù)責(zé)生成技能。完事兒。讓我們來看看效果。

范例2:制作劍陣技能

劍陣技能就是在玩家角色為圓心生成一個(gè)圓形傷害區(qū)域,在該區(qū)域中的敵人會(huì)持續(xù)受到傷害,到時(shí)間之后就自動(dòng)消失。

第一步:將劍陣的預(yù)制體放入Resource文件夾下的SkillPrefab文件夾中去,將預(yù)制體重命名為Rotating(方便填寫數(shù)據(jù)),并將我們釋放技能時(shí)要播放的動(dòng)畫也放到我們玩家角色的Animator中,也將其重命名。

第二步:同樣在CharaterSkillManager中配置好劍陣技能的數(shù)據(jù)。

劍陣技能


重點(diǎn)說一下不同的地方。這個(gè)劍陣技能需要持續(xù)對(duì)范圍內(nèi)的敵人造成傷害,所以Disappear Type是選擇TimeOver并且Attack Type選擇Aoe傷害。由于是以玩家角色為中心釋放的技能,所以也不需要填寫Skill Indicator技能指示器。其他各項(xiàng)數(shù)據(jù)可以根據(jù)自己的需求填寫。

第三步:編寫好技能需要調(diào)用的效果算法和指定范圍目標(biāo)選擇算法。

第四步:給技能預(yù)制體掛上對(duì)應(yīng)的技能釋放器腳本,劍陣是在角色腳下釋放生成的,所以這里我們掛載上MeleeSkillDeployer腳本。在釋放器的作用就是找到并調(diào)用效果算法和目標(biāo)選擇算法。

第五步:給玩家編寫一個(gè)控制腳本,負(fù)責(zé)生成技能??纯葱Ч?。


好了,本文簡(jiǎn)單介紹了一下這個(gè)技能系統(tǒng),并帶著大家使用了一遍,下一篇文章我會(huì)分享出代碼和詳細(xì)的思路。

我們下篇文章見。

皮皮關(guān)與網(wǎng)易聯(lián)合開發(fā)了完備的游戲開發(fā)線上課程。想要進(jìn)軍游戲開發(fā)領(lǐng)域的童鞋,可戳下面鏈接了解課程詳情:

https://ke.study.163.com/course/detail/100103487

如果有任何問題,還可以通過以下聯(lián)系方式與網(wǎng)易小伙伴取得聯(lián)系,有什么問題直接正面懟上渠(戰(zhàn)術(shù)后退

同時(shí),歡迎加入游戲開發(fā)群歡樂攪基:1082025059


在Unity中制作完整的技能系統(tǒng)(介紹篇)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
肃南| 咸宁市| 商都县| 米林县| 博乐市| 佛坪县| 天等县| 淮阳县| 兴城市| 永济市| 当雄县| 光山县| 昭通市| 武平县| 定兴县| 勐海县| 新余市| 石林| 广州市| 绥化市| 且末县| 大城县| 赫章县| 青冈县| 水富县| 陆川县| 英超| 衡水市| 环江| 梅州市| 静海县| 祁阳县| 秦安县| 宝应县| 重庆市| 秦皇岛市| 高唐县| 林甸县| 英山县| 新和县| 淅川县|