發(fā)布時(shí)間:2023-11-27 16:46:17 瀏覽量:112次
文/周尚宣
本文選自機(jī)械工業(yè)出版社出版的《Unity3D動(dòng)作游戲開發(fā)》一書的9.1節(jié),略有改動(dòng)。經(jīng)出版社授權(quán)刊登于此。
君臨都市是一款PS2末期推出的動(dòng)作游戲,它沿襲了格斗游戲嚴(yán)謹(jǐn)?shù)呐卸ú⒁匀_格斗作為其主要戰(zhàn)斗模式。戰(zhàn)斗中存在著大量的投技、拆投、組合技等,游戲中還設(shè)有部位破壞的獨(dú)特概念,角色被分為上中下三段傷害區(qū)域,玩家不可一味地對(duì)其某一段進(jìn)行攻擊,從而增加戰(zhàn)斗的策略性。本節(jié)將針對(duì)多人組合技能以及人形通用動(dòng)作的設(shè)計(jì)來進(jìn)行剖析。
通用動(dòng)作方案設(shè)計(jì)
本作中設(shè)有60名敵人,包括不同的流派、體型、身高等,如第16關(guān)的空手道角色或女主角的功夫等。如此之多的角色動(dòng)畫是這一類游戲的典型問題之一,通常可以采用一套通用動(dòng)畫的多個(gè)不同形體的方式并借助通用骨骼去解決,即一個(gè)動(dòng)畫同時(shí)做瘦、中、胖三個(gè)版本,以匹配不同體型的敵人。在Unity引擎中,使用人形動(dòng)畫的功能可以解決這類需求。
繼續(xù)觀察本作會(huì)發(fā)現(xiàn),一些流派使用的角色相對(duì)較少,且角色大都為中等體型,并且女性角色較少。所以進(jìn)一步優(yōu)化,在制作通用骨骼動(dòng)畫時(shí)對(duì)于使用固定流派的敵人可以做一套通用;而對(duì)于通用流派的敵人,建議依據(jù)身高、體型制作兩套或以上通用動(dòng)畫即可。
組合攻擊的再實(shí)現(xiàn)
本作中的組合攻擊通常是指多個(gè)己方角色同時(shí)對(duì)敵人發(fā)動(dòng)的特殊動(dòng)畫攻擊,或者是依賴站位在特殊條件下主角一人對(duì)多人發(fā)動(dòng)的特殊動(dòng)畫攻擊,如圖1所示。
一對(duì)三組合攻擊示意圖
這里以主角一對(duì)多組合攻擊的情形進(jìn)行腳本實(shí)現(xiàn),這種情形的觸發(fā)邏輯一般是當(dāng)主角周邊站有敵人時(shí),以敵人的某種朝向、站姿的指定規(guī)則進(jìn)行觸發(fā)??紤]到其與技能系統(tǒng)還是有一些區(qū)別,并且較為依賴敵人朝向等信息,故這里單獨(dú)作為一個(gè)模塊制作。
先來看一下實(shí)現(xiàn)這個(gè)模塊所需要的腳本結(jié)構(gòu)關(guān)系,如圖2所示。
組合攻擊功能腳本的邏輯關(guān)系
在圖2中,ComposeAttackController腳本中存放著不同的組合攻擊類型,通過Update事件函數(shù)每幀更新當(dāng)前可觸發(fā)的組合攻擊,并將信息存于索引字段中。上下文Compose- AttackContext結(jié)構(gòu)的信息存放了組合攻擊所需要角色的自身組件,如Animator、Transform等,可根據(jù)需求自行增加字段。TriggeredComposeSkill函數(shù)是在外部模塊調(diào)用時(shí)觸發(fā)并通過協(xié)程執(zhí)行的。
(1)首先定義一些基礎(chǔ)腳本。先來定義上下文結(jié)構(gòu),它包含了角色自身的一些信息。
public struct ComposeAttackContext
{
public Transform CasterTransform { get; set; } //自身變換
public Animator Animator { get; set; } //自身Animator組件
}
隨后編寫ComposeAttackBase腳本,它定義了組合攻擊的基本抽象行為。
public abstract class ComposeAttackBase : ScriptableObject
{
public abstract bool CanTrigger(ComposeAttackContext context, bool
prepareTrigger);
public abstract IEnumerator Trigger(ComposeAttackContext context);
CanTrigger函數(shù)判斷當(dāng)前是否可以觸發(fā)組合攻擊;第二個(gè)參數(shù)prepareTrigger決定是否記錄參數(shù)以準(zhǔn)備觸發(fā)組合攻擊,例如在檢測(cè)的同時(shí)記錄下RaycastHit信息。第二個(gè)函數(shù)Trigger將進(jìn)入觸發(fā)邏輯。
(2)接下來編寫ComposeAttackController腳本,用于處理組合攻擊邏輯,是該模塊的核心腳本。
public class ComposeAttackController : MonoBehaviour
{
[SerializeField] Animator animator = null; //上下文所需接口,面板暴露參數(shù)
//組件列表面板暴露參數(shù)
[SerializeField] ComposeAttackBase[] composeAttackArray = null;
//當(dāng)前已觸發(fā)的組合技能索引
public int TriggerableComposeAttackIndex { get; private set; }
//對(duì)外提供組合技能數(shù)組列表
public ComposeAttackBase[] GetComposeAttackArray()
{
return composeAttackArray;
}
//每一幀更新組合技能是否觸發(fā)邏輯,但可修改enabled關(guān)閉腳本更新
public void Update()
{
var context = new ComposeAttackContext() { Animator = animator,
CasterTransform = transform };
for (int i = 0; i < composeAttackArray.Length; i++)
{
var item = composeAttackArray[i];
if (item.CanTrigger(context, true)) //觸發(fā)條件檢測(cè)
{
TriggerableComposeAttackIndex = i;
break;
}
}
}
public IEnumerator TriggeredComposeSkill(int index)//組合技能的觸發(fā)接口
{
if (index > composeAttackArray.Length - 1) //索引越界報(bào)錯(cuò)
throw new ArgumentOutOfRangeException();
var context = new ComposeAttackContext() { Animator = animator,
CasterTransform = transform };
yield return composeAttackArray[index].Trigger(context);//執(zhí)行觸發(fā)
}
}
通常將該腳本掛載至角色自身。
(3)接著編寫一個(gè)具體組合攻擊腳本ComposeAttack1。若角色前后或左右都有敵人,就會(huì)觸發(fā)該組合攻擊。
public class ComposeAttackController : MonoBehaviour
{
[SerializeField] Animator animator = null; //上下文所需接口,面板暴露參數(shù)
//組件列表面板暴露參數(shù)
[SerializeField] ComposeAttackBase[] composeAttackArray = null;
//當(dāng)前已觸發(fā)的組合技能索引
public int TriggerableComposeAttackIndex { get; private set; }
//對(duì)外提供組合技能數(shù)組列表
public ComposeAttackBase[] GetComposeAttackArray()
{
return composeAttackArray;
}
//每一幀更新組合技能是否觸發(fā)邏輯,但可修改enabled關(guān)閉腳本更新
public void Update()
{
var context = new ComposeAttackContext() { Animator = animator,
CasterTransform = transform };
for (int i = 0; i < composeAttackArray.Length; i++)
{
var item = composeAttackArray[i];
if (item.CanTrigger(context, true)) //觸發(fā)條件檢測(cè)
{
TriggerableComposeAttackIndex = i;
break;
}
}
}
public IEnumerator TriggeredComposeSkill(int index)//組合技能的觸發(fā)接口
{
if (index > composeAttackArray.Length - 1) //索引越界報(bào)錯(cuò)
throw new ArgumentOutOfRangeException();
var context = new ComposeAttackContext() { Animator = animator,
CasterTransform = transform };
yield return composeAttackArray[index].Trigger(context);//執(zhí)行觸發(fā)
}
}
這里通過CheckBox接口檢測(cè)四周是否有敵人,mIsForwardAndBackword變量存儲(chǔ)是左右受敵狀態(tài)還是前后受敵狀態(tài)。Trigger函數(shù)中的處理這里較為簡(jiǎn)單,在實(shí)際項(xiàng)目中建議將具體技能邏輯置于其中。
(4)最后將其在Project面板中創(chuàng)建,并結(jié)合ComposeAttackController腳本將其掛載。當(dāng)外部模塊觸發(fā)輸入后調(diào)用觸發(fā)接口以觸發(fā)組合攻擊,如圖3所示。
組合攻擊完成效果圖
熱門資訊
探討游戲引擎的文章,介紹了10款游戲引擎及其代表作品,涵蓋了RAGE Engine、Naughty Dog Game Engine、The Dead Engine、Cry Engine、Avalanche Engine、Anvil Engine、IW Engine、Frostbite Engine、Creation引擎、Unreal Engine等引擎。借此分析引出了游戲設(shè)計(jì)領(lǐng)域和數(shù)字藝術(shù)教育的重要性,歡迎點(diǎn)擊咨詢報(bào)名。
2. 手機(jī)游戲如何開發(fā)(如何制作傳奇手游,都需要準(zhǔn)備些什么?)
?如何制作傳奇手游,都需要準(zhǔn)備些什么?提到傳奇手游相信大家都不陌生,他是許多80、90后的回憶;從起初的端游到現(xiàn)在的手游,說明時(shí)代在進(jìn)步游戲在更新,更趨于方便化移動(dòng)化。而如果我們想要制作一款傳奇手游的
3. B站視頻剪輯軟件「必剪」:免費(fèi)、炫酷特效,小白必備工具
B站視頻剪輯軟件「必剪」,完全免費(fèi)、一鍵制作炫酷特效,適合新手小白??靵碓囋?!
4. Steam值得入手的武俠游戲盤點(diǎn),各具特色的快意江湖
游戲中玩家將面臨武俠人生的掙扎抉擇,戰(zhàn)或降?殺或放?每個(gè)抉定都將觸發(fā)更多愛恨糾葛的精彩奇遇?!短烀嬗肪哂卸嗑€劇情多結(jié)局,不限主線發(fā)展,高自由...
5. Bigtime加密游戲經(jīng)濟(jì)體系揭秘,不同玩家角色的經(jīng)濟(jì)活動(dòng)
Bigtime加密游戲經(jīng)濟(jì)模型分析,探討游戲經(jīng)濟(jì)特點(diǎn),幫助玩家更全面了解這款GameFi產(chǎn)品。
6. 3D動(dòng)畫軟件你知道幾個(gè)?3ds Max、Blender、Maya、Houdini大比拼
當(dāng)提到3D動(dòng)畫軟件或動(dòng)畫工具時(shí),指的是數(shù)字內(nèi)容創(chuàng)建工具。它是用于造型、建模以及繪制3D美術(shù)動(dòng)畫的軟件程序。但是,在3D動(dòng)畫軟件中還包含了其他類型的...
7. 3D動(dòng)漫建模全過程,不是一般人能學(xué)的會(huì)的,會(huì)的多不是人?
步驟01:面部,頸部,身體在一起這次我不準(zhǔn)備設(shè)計(jì)圖片,我從雕刻進(jìn)入。這一次,它將是一種純粹關(guān)注建模而非整體繪畫的形式。像往常一樣,我從Sphere創(chuàng)建它...
8. 如何自己開發(fā)一款游戲(游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧)
?游戲開發(fā)入門必看:五大獨(dú)立游戲開發(fā)技巧無論您是剛剛起步開發(fā)自己的第一款游戲,還是已經(jīng)制作了幾款游戲,本篇文章中的5大獨(dú)立游戲開發(fā)技巧都可以幫助您更好地設(shè)計(jì)下一款游戲。無論你對(duì)游戲有著什么樣的概念,都
?三昧動(dòng)漫對(duì)于著名ARPG游戲《巫師》系列,最近CD Projekt 的高層回應(yīng)并不會(huì)推出《巫師4》。因?yàn)椤段讕煛废盗性诓邉澋臅r(shí)候一直定位在“三部曲”的故事框架,所以在游戲的出品上不可能出現(xiàn)《巫師4》
10. 3D打印技巧揭秘!Cura設(shè)置讓你的模型更堅(jiān)固
想讓你的3D打印模型更堅(jiān)固?不妨嘗試一下Cura參數(shù)設(shè)置和設(shè)計(jì)技巧,讓你輕松掌握!
最新文章
同學(xué)您好!